home *** CD-ROM | disk | FTP | other *** search
/ Aminet 49 / Aminet 49 (2002)(GTI - Schatztruhe)[!][Jun 2002].iso / Aminet / mus / edit / AmySequencer.lha / AmySequencer / AmySequencer2.text < prev    next >
Text File  |  2002-04-08  |  169KB  |  4,601 lines

  1. ;-> AmySequencer2 by Stefano Maria Regattin
  2. ;d> 19 gennaio 2002 da AmySequencer
  3. ;m> 20,21,22,23,24,26,30,31 gennaio 2002
  4. ;m> 1,2,3,4,5,6,7,9,10,11,13,15,16,17,18,19,20,22,23,24,27,28 febbraio 2002
  5. ;m> 1,2,3,4,5,6,7,8,10,11,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,31 marzo 2002
  6. ;m> 1,2,4,5,6,8 Aprile 2002
  7. ;---------------------------
  8.  
  9. ;------------------------------------------
  10. ;dati per i colori originali dello schermo
  11. ;original screen colours data
  12. ;-----------------------------
  13. Data.b 0,0,0
  14. Data.b 4,4,4
  15. Data.b 8,8,8
  16. Data.b 12,12,12
  17. Data.b 12,0,0
  18. Data.b 12,6,0
  19. Data.b 12,12,0
  20. Data.b 6,12,0
  21. Data.b 0,12,0
  22. Data.b 0,12,6
  23. Data.b 0,12,12
  24. Data.b 0,6,12
  25. Data.b 0,0,12
  26. Data.b 6,0,12
  27. Data.b 12,0,12
  28. Data.b 12,0,6
  29.  
  30. ;------------------------------------------------------------------------
  31. ;il seguemte comando indica dove si trovano sul vostro computer i codici
  32. ; sorgenti di Blitz2 da includere in questo programma
  33. ;the following command states the place on your computer where are the Blitz2
  34. ; source codes to be included into this program
  35. ;-----------------------------------------------
  36. INCDIR "Blitz2:Sorgenti/"
  37.  
  38. ;-------------------------------------------------------------------------
  39. ;questo comando inserisce una sola volta in questo punto del programma il
  40. ; codice sorgente specificato
  41. ;-----------------------------
  42. XINCLUDE "MIDIConstants.bb2"
  43.  
  44. ;------------------------------------------------------------------------------
  45. ;le seguenti costanti servono per ricavare il periodo di un canale audio AMIGA
  46. ; dalla frequenza di campionamento; ce ne e' una per gli AMIGA PAL e una per
  47. ; quelli NTSC
  48. ;the following constants are used to obtain an AMIGA audio channel period from the
  49. ; sampling frequency; there is one for PAL AMIGAs and one for NTSC AMIGAs
  50. ;-------------------------------------------------------------------------
  51.  
  52. ;PAL timing
  53. #TemporizzazionePAL=3546895
  54.  
  55. ;NTSC timing
  56. #TemporizzazioneNTSC=3579545
  57.  
  58. ;-------------------------------------------------------------------------
  59. ;questa costante indica il numero di riferimento della fonte di caratteri
  60. ; Topaz8
  61. ;this constant states the characters font Topaz8 referring number
  62. ;-----------------------------------------------------------------
  63. #FonteDiCaratteriTopaz8=0
  64.  
  65. ;-------------------------------------------------------------------------
  66. ;questa variabile imposta il periodo minimo per i canali audio; il limite
  67. ; per i vecchi AMIGA e' 123, ma io ho scelto un periodo minimo di 125, che
  68. ; corrisponde ad un La nella nona ottava
  69. ;this variable sets the audio channels minimum period for the audio channels;
  70. ; on the oldest AMIGA the lowerst usable period is 123, but I have choosen a
  71. ; minimum period of 125, that is the A note in the ninth octave
  72. ;---------------------------------------------------------------
  73. #PeriodoMinimo=125
  74.  
  75. ;---------------------------------------------------------------------------
  76. ;questa costante indica il numero di riferimento della tavolozza dei colori
  77. ; disponibili
  78. ;this constant states the colour palette referring number
  79. ;---------------------------------------------------------
  80. #TavolozzaDeiColori=0
  81.  
  82. ;--------------------------------------------------
  83. ;le seguenti costanti indicano il tipo di finestra
  84. ;the following constants state the window's kind
  85. ;------------------------------------------------
  86.  
  87. ;window sizing gadget
  88. #GadgetRidimensionaFinestra=1
  89.  
  90. ;draggable window
  91. #FinestraMovibile=2
  92.  
  93. ;window depth gadget
  94. #GadgetNascondiFinestra=4
  95.  
  96. ;close gadget
  97. #GadgetChiudiFinestra=8
  98.  
  99. ;sizing window right border (you must set gimme-zero-zero to use it)
  100. #BordoDestraFinestraRidimensionabile=16
  101.  
  102. ;sizing window bottom border (you must set gimme-zero-zero to use it)
  103. #BordoBassoFinestraRidimensionabile=32
  104.  
  105. ;backdrop window
  106. #FinestraDiSfondo=256
  107.  
  108. ;gimme-zero-zero window
  109. #FinestraConMemoriaSfondo=1024
  110.  
  111. ;borderless window
  112. #FinestraSenzaBordi=2048
  113.  
  114. ;window active
  115. #FinestraAttivata=4096
  116.  
  117. ;------------------------------------------------
  118. ;le seguenti costanti indicano il tipo di gadget
  119. ;the following constants state the gadgets' kind
  120. ;------------------------------------------------
  121.  
  122. ;invert
  123. #InvertiGadget=1
  124.  
  125. ;related to window's right side
  126. #PosizioneRelativaAllaDestraDellaFinestra=2
  127.  
  128. ;related to window'w bottom side
  129. #PosizioneRelativaAlBassoDellaFinestra=4
  130.  
  131. ;size as window's inner width
  132. #ComeLarghezzaInternaFinestra=8
  133.  
  134. ;size as window's inner height
  135. #ComeAltezzaInternaFinestra=16
  136.  
  137. ;box select
  138. #ScatolaDaSelezionare=32
  139.  
  140. ;horiziontal movement
  141. #MovimentoOrizzontale=64
  142.  
  143. ;vertical movement
  144. #MovimentoVerticale=128
  145.  
  146. ;no border
  147. #NessunBordo=256
  148.  
  149. ;exclude each other
  150. #SiEscludonoLUnLAltro=512
  151.  
  152. ;attach to window's right side
  153. #AttaccaADestraDellaFinestra=1024
  154.  
  155. ;attach to window's left side
  156. #AttaccaASinistraDellaFinestra=2048
  157.  
  158. ;attach to window's top
  159. #AttaccaAllaFinestraInAlto=4096
  160.  
  161. ;attach to window's bottom
  162. #AttaccaAllaFinestraInBasso=8192
  163.  
  164. ;gimme-zero-zero border gadget
  165. #GadgetConMemoriaBordo=16384
  166.  
  167. ;--------------------------------------------------------
  168. ;le seguenti costanti indicano gli eventi delle finestre
  169. ;tht following constants state window events
  170. ;--------------------------------------------
  171. ;you have pressed a mouse button
  172. #HaiPremutoUnTastoDelTopo=8
  173.  
  174. ;you have moved the mouse
  175. #HaiMossoIlTopo=16
  176.  
  177. ;you have pressed a gadget
  178. #HaiPremutoUnGadget=32
  179.  
  180. ;you have released a gadget
  181. #HaiRilasciatoUnGadget=64
  182.  
  183. ;you have activated a menu
  184. #HaiAttivatoIlMenu=256
  185.  
  186. ;you have closed the window
  187. #HaiChiusoLaFinestra=512
  188.  
  189. ;you have pressed a key
  190. #HaiPremutoUnTasto=1024
  191.  
  192. ;--------------------------------------------------------
  193. ;le seguenti costanti indicano i tasti cliccati del topo
  194. ;the following constants state the clicked mouse buttons
  195. ;--------------------------------------------------------
  196.  
  197. ;left mouse button pressed
  198. #TastoSinistroDelTopoPremuto=1
  199.  
  200. ;right mouse button pressed
  201. #TastoDestroDelTopoPremuto=2
  202.  
  203. ;left mouse button released
  204. #TastoSinistroDelTopoRilasciato=5
  205.  
  206. ;right mouse button released
  207. #TastoDestroDelTopoRilasciato=6
  208.  
  209. ;-----------------------------------------------------------------------------
  210. ;le seguenti costanti indicano il valore ascii del tasti Backspace, Esc e dei
  211. ; tasti freccia
  212. ;the following constants state the ascii value for the Backspace, Esc and
  213. ; arrow keys
  214. ;------------
  215. #Backspace=8
  216. #Escape=27
  217. #CursorUp=28
  218. #CursorDown=29
  219. #CursorRight=30
  220. #CursorLeft=31
  221.  
  222. ;Backspace key
  223. TastoBackspace$=Chr$(#Backspace)
  224.  
  225. ;Esc key
  226. TastoEsc$=Chr$(#Escape)
  227.  
  228. ;Cursor up key
  229. TastoCursoreSu$=Chr$(#CursorUp)
  230.  
  231. ;Cursor down key
  232. TastoCursoreGiu$=Chr$(#CursorDown)
  233.  
  234. ;Cursor right key
  235. TastoCursoreDestra$=Chr$(#CursorRight)
  236.  
  237. ;Cursor left key
  238. TastoCursoreSinistra$=Chr$(#CursorLeft)
  239.  
  240. ;-----------------------------------------------------------
  241. ;le seguenti costanti indicano i bottoni del joypad premuti
  242. ;the following constants state the joypad pressed buttons
  243. ;---------------------------------------------------------
  244. #_PlayB=1
  245. #_ReverseB=2
  246. #_ForwardB=4
  247. #_GreenB=8
  248. #_YellowB=16
  249. #_RedB=32
  250. #_BlueB=64
  251.  
  252. ;-------------------------------------------------------------------------
  253. ;le seguenti costanti indicano la direzione scelta con il joystick/joypad
  254. ;the following constants state the choosen direction by joystick/joypad
  255. ;-----------------------------------------------------------------------
  256. #JoyMovedUp=0
  257. #JoyMovedRight=2
  258. #JoyMovedDown=4
  259. #JoyMovedLeft=6
  260. #JoyNotMoved=8
  261.  
  262. ;screen
  263. #Schermo=0
  264.  
  265. ;main window
  266. #FinestraPrincipale=0
  267.  
  268. ;main window's gadget list
  269. #ListaGadgetPrincipale=0
  270.  
  271. ;main window's menu list
  272. #ListaMenuPrincipale=0
  273.  
  274. ;sounds editor window
  275. #FinestraEditoreSuoni=1
  276.  
  277. ;sounds editor window's gadget list
  278. #ListaGadgetEditoreSuoni=1
  279.  
  280. ;sound editor window's menu list
  281. #ListaMenuEditoreSuoni=1
  282.  
  283. ;notes editor window
  284. #FinestraEditoreSequenza=2
  285.  
  286. ;notes editor window's gadget list
  287. #ListaGadgetEditoreSequenza=2
  288.  
  289. ;notes editor window's menu list
  290. #ListaMenuEditoreSequenza=2
  291.  
  292. ;note editor window's zonetable
  293. #TabellaZoneEditoreSequenza=0
  294.  
  295. ;window to change basic note length
  296. #FinestraCambioEventoBase=3
  297.  
  298. ;basic note length change window's gadget list
  299. #ListaGadgetCambioEventoBase=3
  300.  
  301. ;basic note change window's zonetable
  302. #TabellaZoneCambioEventoBase=1
  303.  
  304. ;background pic's bitmap
  305. #BitmapImmagineDiSfondo=0
  306.  
  307. ;------------------------------------------------------------------------------
  308. ;queste costanti indicano i cambiamenti che possono essere applicati alle note
  309. ;these constants states different changes that can be applied to notes
  310. ;----------------------------------------------------------------------
  311.  
  312. ;select an event
  313. #SelezionaUnEvento=0
  314.  
  315. ;change the channel of the selected events
  316. #CambiaIlCanaleDegliEventiSelezionati=1
  317.  
  318. ;increase by one the selected events
  319. #AlzaDiUnoGliEventiSelezionati=2
  320.  
  321. ;decrease one the selected events
  322. #AbbassaDiUnoGliEventiSelezionati=3
  323.  
  324. ;move forward the selected events
  325. #SpostaAvantiNelTempoGliEventiSelezionati=4
  326.  
  327. ;move backward the selected events
  328. #SpostaIndietroNelTempoGliEventiSelezionati=5
  329.  
  330. ;delete the selected events
  331. #EliminaGliEventiSelezionati=6
  332.  
  333. ;select all the events
  334. #SelezionaTuttiGliEventi=7
  335.  
  336. ;deselect all the events
  337. #DeselezionaTuttiGliEventi=8
  338.  
  339. ;toggle selection of all events
  340. #InvertiLaSelezioneDiTuttiGliEventi=9
  341.  
  342. ;select same kind's events with the same height and of the same channel
  343. #SelezionaGliEventiUguali=10
  344.  
  345. ;add 10 to the to the event value of the selected events that aren't notes
  346. #AggiungiDieciAgliEventiSelezionati=11
  347.  
  348. ;sub 10 to the event value of the selected events that aren't notes
  349. #SottraiDieciAgliEventiSelezionati=12
  350.  
  351. ;put up of one octave the selected notes
  352. #AlzaDiUnOttavaLeNoteSelezionate=13
  353.  
  354. ;put down of one octave the selected notes
  355. #AbbassaDiUnOttavaLeNoteSelezionate=14
  356.  
  357. ;change the value of the selected events, that is velocity for notes
  358. #CambiaIlValoreDegliEventiSelezionati=15
  359.  
  360. ;increase the selected notes length
  361. #AllungaLaDurataDelleNoteSelezionate=16
  362.  
  363. ;decrease the selected notes length
  364. #RiduciLaDurataDelleNoteSelezionate=17
  365.  
  366. ;add a beat to selected time signature events
  367. #AggiungiUnBattitoAlTempoSelezionato=18
  368.  
  369. ;sub a beat to selected time signature events
  370. #TogliUnBattitoAlTempoSelezionato=19
  371.  
  372. ;add a measure to selected time signature events
  373. #AggiungiUnaMisuraAlTempoSelezionato=20
  374.  
  375. ;sub a measure to selected time signature events
  376. #TogliUnaMisuraAlTempoSelezionato=21
  377.  
  378. ;------------------------------------------------------------------------------
  379. ;le seguenti costanti indicano il modo di disegno delle sequenze  visualizzate
  380. ;the following constants state the displayed sequences drawing mode
  381. ;-------------------------------------------------------------------
  382.  
  383. ;unselected sequence
  384. #SequenzaNonSelezionata=0
  385.  
  386. ;selected sequence
  387. #SequenzaSelezionata=1
  388.  
  389. ;highlighted sequence
  390. #SequenzaEvidenziata=2
  391.  
  392. ;-------------------------------------------------------------------------
  393. ;le seguenti costanti indicano il modo di disegno delle note visualizzate
  394. ;the following constants state the displayed notes drawing mode
  395. ;---------------------------------------------------------------
  396.  
  397. ;unselected event
  398. #EventoNonSelezionato=0
  399.  
  400. ;selected event
  401. #EventoSelezionato=1
  402.  
  403. ;highlighted event
  404. #EventoEvidenziato=2
  405.  
  406. ;----------------------------------------------
  407. ;queste costanti indicano come suonare le note
  408. ;these constants state how to play notes
  409. ;----------------------------------------
  410.  
  411. ;execute events from the main window
  412. #EseguiGliEventiDallaFinestraPrincipale=0
  413.  
  414. ;execute events from the sequence editor
  415. #EseguiGliEventiDallEditoreSequenza=1
  416.  
  417. ;---------------------------------------------------------------------------
  418. ;le seguenti costanti sono usate dal comando WJam per la selezione del modo
  419. ; grafico
  420. ;the following constants are used by WJam command for the graphic mode selection
  421. ;--------------------------------------------------------------------------------
  422.  
  423. ;one colour with transparent background
  424. #UnColoreConSfondoTrasparente=0
  425.  
  426. ;two colours with full background
  427. #DueColoriConSfondoPieno=1
  428.  
  429. ;second time same colour
  430. #SecondaVoltaStessoColore=2
  431.  
  432. ;--------------------------------------------------------------
  433. ;le seguenti costanti indicano il tempo base che e' 4/4, cioe'
  434. ; #BattitiDiBase/#MisureDiBase
  435. ;the following constants states the basic time that is 4/4, that is
  436. ; #BattitiDiBase/#MisureDiBase
  437. ;------------------------------
  438.  
  439. ;basic beats
  440. #BattitiDiBase=4
  441.  
  442. ;basic measures
  443. #MisureDiBase=4
  444.  
  445. ;sequences maximum
  446. #MassimoSequenze=1024
  447.  
  448. ;          font height, notes invisible area,   selected channel, note Incremento y,musical event moved by mouse
  449. DEFTYPE .b AltezzaFonte,AreaInvisibileDelleNote,CanaleSelezionato,IncrementoYNota,  EventoMusicaleSpostatoConIlTopo
  450.  
  451. ;          mouse pressed key,   AMIGA voice off,visible area start y,note position y,visible sequences
  452. DEFTYPE .b TastoPremutoDelTopo, VoceSpenta,     YInizioAreaVisibile, YPosizioneNota, SequenzeVisibili
  453.  
  454. ;          editor window inner height,           editor window inner width
  455. DEFTYPE .w AltezzaInternaFinestraEditoreSequenza,LarghezzaInternaFinestraEditoreSequenza
  456.  
  457. ;          main window inner height,        main window inner width
  458. DEFTYPE .w AltezzaInternaFinestraPrincipale,LarghezzaInternaFinestraPrincipale
  459.  
  460. ;          screen height, note Incremento y,values visible area,  screen height,   selected sequence
  461. DEFTYPE .w AltezzaSchermo,IncrementoYNota,  AreaVisibileDeiValori,LarghezzaSchermo,SequenzaSelezionata
  462.  
  463. ;          slider length, tempo background x,mouse x,slider height,tempo background y,mouse y
  464. DEFTYPE .w XLunSlider,    XPosSfondoTempo,   XTopo,  YLunSlider,   YPosSfondoTempo,   YTopo
  465.  
  466. ;          time invisible area,   note Incremento x,Sequence duration,Events,Selected events,  MIDI enabled
  467. DEFTYPE .l AreaInvisibileDelTempo,IncrementoXNota,  DurataSequenza,   Eventi,EventiSelezionati,MIDIAttivato
  468.  
  469. ;          visible area start x,note position x
  470. DEFTYPE .l XInizioAreaVisibile, XPosizioneNota
  471.  
  472. ;----------------------------------------------------------
  473. ;questa variabile riporta la parte non visibile del motivo
  474. ;this variable reports the non visible motive area
  475. ;--------------------------------------------------
  476. AreaInvisibileDelMotivo.l=0
  477.  
  478. ;-----------------------------------------------------------------------------
  479. ;questa variabile indica la velocita' di esecuzione delle note, indicata come
  480. ; battute al minuto
  481. ;this variable states the notes execution velocity, stated as bars for minute
  482. ;-----------------------------------------------------------------------------
  483. BattuteAlMinuto.w=120
  484.  
  485. ;-----------------------------------------------------
  486. ;questa variabile indica i battiti correnti del tempo
  487. ;this variable states the time's current beats
  488. ;----------------------------------------------
  489. Battiti.b=#BattitiDiBase
  490.  
  491. ;----------------------------------------------------------------------------
  492. ;la seguente variabile permette la selezione delle due diverse tavolozze dei
  493. ; colori; se vera (true), i colori saranno quelli originali, se falsa (false)
  494. ; saranno quelli dell'immagine di sfondo
  495. ;the following variable permits the selection of the two different colour
  496. ; palettes; if true the colours will be as original, if false they will be
  497. ; the ones from the pic
  498. ;-----------------------
  499. ColoriOriginali.b=False
  500.  
  501. ;-----------------------------------------------------
  502. ;questa variabile indica le misure correnti del tempo
  503. ;this variable states the time's current measures
  504. ;-------------------------------------------------
  505. Misure.b=#MisureDiBase
  506.  
  507. ;----------------------------------------------------------------------------
  508. ;questa costante indica il valore per cui bisogna moltiplicare o dividere la
  509. ; frequenza della nota per ricavare rispettivamente la nota successiva o la
  510. ; nota precedente e corrisponde a 2^(1/12)
  511. ;this constant states the value witch it must moltiply or divide the note
  512. ; frequency to obtain respectiveli the following note or the previous note and
  513. ; corresponds to 2^(1/12)
  514. ;-------------------------
  515. DistanzaSemitono.f=1.05946309
  516.  
  517. ;--------------------------------------------------------------
  518. ;questa variabile, diventando Vera, vi fa uscire dal programma
  519. ;this variable, becaming True, let you quit the program
  520. ;-------------------------------------------------------
  521. EsciDalProgramma.b=False
  522.  
  523. ;------------------------------------------
  524. ;questa variabile indica la fine del brano
  525. ;this variable states music end
  526. ;-------------------------------
  527. FineMotivo.l=0
  528.  
  529. ;------------------------------------------------------------------
  530. ;questa variabile indica se e' stata aperta la finestra principale
  531. ;this flag states if the main window is opened
  532. ;----------------------------------------------
  533. FinestraPrincipaleAperta.b=False
  534.  
  535. ;------------------------------------------------------------------------------
  536. ;Questa variabile indica la larghezza di base delle note; puo' essere cambiata
  537. ; secondo i bisogni del momento
  538. ;This variable states the basic notes width; it can be changed depending of
  539. ; the needs of the moment
  540. ;-------------------------
  541. LarghezzaEventoDiBase.w=192
  542.  
  543. ;----------------------------------------------------------------------------
  544. ;questa variabile indica se deve essere mostrato il nuovo valore dell'evento
  545. ; selezionato mosso con il mouse
  546. ;this variable states if the new value of the event dragged by mouse must be
  547. ; showed or not
  548. ;---------------
  549. MostraNuovoValore.b=False
  550.  
  551. ;----------------------------------------------------------------------
  552. ;questa variabile sara' vera (True) se una nota non e' stata terminata
  553. ;this variable will be true is a note will not be terminated
  554. ;------------------------------------------------------------
  555. NoteSuonate.l=False
  556.  
  557. ;-------------------------------------------------------------------
  558. ;questa variabile indica l'ottava selezionata nell'editore sequenza
  559. ;this variable states the selected octave in the sequence editor
  560. ;----------------------------------------------------------------
  561. OttavaSelezionata.b=#_MiddleC/12
  562.  
  563. ;---------------------------------------------------------------
  564. ;questa variabile indica la scala di visualizzazione delle note
  565. ;this variable states the notes visualiziation scale
  566. ;----------------------------------------------------
  567. ScalaNote.b=1
  568.  
  569. ;--------------------------------------------------------
  570. ;questa variabile indica il numero di sequenze esistenti
  571. ;this variable states the number of existing sequences
  572. ;------------------------------------------------------
  573. Sequenze.w=0
  574.  
  575. ;-----------------------------------------------------------------------------
  576. ;questa variabile indica se la lista degli ultimi 5 progetti e' stata scritta
  577. ;this flag states if the last 5 loaded projects list has been written
  578. ;---------------------------------------------------------------------
  579. StoriaDeiProgettiAperti.b=False
  580.  
  581. ;------------------------------------------------------------------------
  582. ;La nota base, il quarto, corrisponde a 192 tick; questa costante indica
  583. ; quanti tick passano in un 50mo di secondo per un tempo di 120 battute al
  584. ; minuto
  585. ;The basic note, the quarter, correspond to 192 ticks; this constant signs how
  586. ; many tick takes place in a 50th of a second
  587. ;---------------------------------------------
  588. TicPerCinquantesimoDiSecondo.f=30.72
  589.  
  590. ;--------------------------------------------------------------------------
  591. ;la seguente variabile stringa indica il tipo di evento musicale corrente;
  592. ; all'inizio e' impostata sull'evento nota
  593. ;the following string variable states the current event; at the beginning is
  594. ; set on the note event
  595. ;-----------------------
  596. TipoDiEvento$="Note"
  597.  
  598. ;------------------------------------------------------------------------------
  599. ;questa variabile indica per le note la velocita' di base e per i controlli il
  600. ; valore di base; valore utile da zero a 127
  601. ;this variable states for the notes the basic velocity and for the controls
  602. ; the basic value; useful value from zero to 127
  603. ;------------------------------------------------
  604. ValoreEventoDiBase.b=64
  605.  
  606. ;-----------------------------------------------------------------------
  607. ;questa variabile indica la posizione della voce Quit del menu' Project
  608. ;this variable marks the position of voice Quit in the Project menu
  609. ;-------------------------------------------------------------------
  610. VoceMenuEsci.b=4
  611.  
  612. ;------------------------------------------------------------------------------
  613. ;questa variabile indica la posizione d'inizio per la  visualizzazione delle
  614. ; sequenze
  615. ;this variables states the start position for the sequences displaying
  616. ;----------------------------------------------------------------------
  617. XSequenzeVisibili.l=0
  618.  
  619. ;-------------------------------------------------------------
  620. ;questa variabile memorizza la prima sequenza da visualizzare
  621. ;this variable stores the first sequence to be displayed
  622. ;--------------------------------------------------------
  623. YSequenzeVisibili.w=0
  624.  
  625. ;-----------------------------------------------------------------------
  626. ;queste 5 variabili conterranno i nomi degli ultimi 5 progetti caricati
  627. ;this 5 variables will keep names of last 5 projects loaded
  628. ;-----------------------------------------------------------
  629. Dim ProgettoAperto$(4)
  630.  
  631. ;-----------------------------------------------------------------------------
  632. ;questa struttura di variabili e' una tabella di riferimento per il periodo e
  633. ; la frequenza associati ad ognuna delle 128 note possibili
  634. ;this variables structure is a refferring table for the periode and frequency
  635. ; paired to every one of the 128 given notes
  636. ;--------------------------------------------
  637. NEWTYPE .PeriFreq
  638.  
  639. ;--------
  640. ;periode
  641. ;--------
  642.  Periodo.l
  643.  
  644. ;----------
  645. ;frequency
  646. ;----------
  647.  Frequenza.f
  648. End NEWTYPE
  649. Dim PeriFreq.PeriFreq(127)
  650.  
  651. ;--------------------------------------------------------------------------
  652. ;la seguente struttura di variabili serve per identificare il tipo di note
  653. ;the following variables structure is used to states the notes kind
  654. ;-------------------------------------------------------------------
  655. NEWTYPE .TipoDiNota
  656.  
  657. ;note italian name
  658.  NomeItaliano$
  659.  
  660. ;note english name
  661.  NomeInglese$
  662.  
  663. ;diesis flag
  664.  Diesis.b
  665.  
  666. ;note octave
  667.  Ottava.b
  668. End NEWTYPE
  669. Dim TipoDiNota.TipoDiNota(127)
  670.  
  671. ;----------------------------------------------------------------
  672. ;la seguente struttura di variabili e' per la gestione dei suoni
  673. ;the following variables structure is for sounds management
  674. ;-----------------------------------------------------------
  675. NEWTYPE .Suono
  676.  
  677. ;---------------------------------------------------
  678. ;questa variabile indica il nome del suono caricato
  679. ;this variable states the name of the loaded sound
  680. ;--------------------------------------------------
  681.  Nome$
  682.  
  683. ;----------------------------------------------------------------------------
  684. ;questa variabile indica il canale associato al suono caricato; valore utile
  685. ; da 1 a 16
  686. ;this variable states the channel linked to the loaded sound; useful value
  687. ; from 1 to 16
  688. ;--------------
  689.  Canale.b
  690.  
  691. End NEWTYPE
  692. Dim Suono.Suono(31)
  693.  
  694. NEWTYPE .Sequenza
  695.  
  696. ;--------------------------------------------------
  697. ;questa variabile memorizza il nome della sequenza
  698. ;this variable stores the sequence name
  699. ;---------------------------------------
  700. Nome$
  701.  
  702. ;----------------------------------------------------------
  703. ;questa variabile indica l'inizio temporale della sequenza
  704. ;this variable states the sequence time start
  705. ;---------------------------------------------
  706. Inizio.l
  707.  
  708. ;---------------------------------------------------------
  709. ;questa variabile indica la fine temporale della sequenza
  710. ;this variable states the sequence time end
  711. ;-------------------------------------------
  712. Durata.l
  713.  
  714. ;------------------------------------------------------------------
  715. ;questa variabile indica gli eventi musicali totali della sequenza
  716. ;this variable states the sequence's total musical events
  717. ;---------------------------------------------------------
  718. Eventi.l
  719.  
  720. ;-----------------------------------------------------------------------
  721. ;questa variabile indica gli eventi musicali selezionati della sequenza
  722. ;this variable states the sequence's selected musical events
  723. ;------------------------------------------------------------
  724. EventiSelezionati.l
  725.  
  726. End NEWTYPE
  727. Dim Sequenza.Sequenza(#MassimoSequenze-1)
  728.  
  729. ;----------------------------------------------------------------------------
  730. ;la seguente struttura di variabili e' per la gestione degli eventi musicali
  731. ;the following vars structure is for the musical events management
  732. ;------------------------------------------------------------------
  733. NEWTYPE .EventoMusicale
  734.  
  735. ;----------------------------------------------------------------------------
  736. ;questa variabile stringa indica il tipo di evento musicale, che puo' essere
  737. ; una nota od un parametro MIDI
  738. ;This string variable states the musical event kind, that can be a note or a
  739. ; MIDI parameter
  740. ;----------------
  741.  Tipo$
  742.  
  743. ;-----------------------------------------------------------------------
  744. ;se l'evento musicale e' una nota, questa variabile ne indica l'altezza;
  745. ; valore utile da zero a 127
  746. ;if the event is a note, this variable states its height; useful value from
  747. ;zero to 127
  748. ;------------
  749.  Evento.b
  750.  
  751. ;----------------------------------------------------------------------------
  752. ;questa variabile indica la posizione dell'evento musicale nel tempo in tic;
  753. ; valore utile da zero a 2 miliardi e rotti
  754. ;this variable states musical event position in time by ticks; useful value
  755. ;from zero to over 2 billions
  756. ;-----------------------------
  757.  Inizio.l
  758.  
  759. ;------------------------------------------------------------------------------
  760. ;questa varibile indica il canale dell'evento musicale; valore utile da 1 a 16
  761. ;this variable states musical event's channel; useful value from 1 to 16
  762. ;------------------------------------------------------------------------
  763.  Canale.b
  764.  
  765. ;-----------------------------------------------------------------------------
  766. ;questa variabile identifica la sequenza di appartenenza dell'evento musicale
  767. ; valore utile da 1 a 500
  768. ;this variable states the sequence witch the musical event belong to: useful
  769. ; value from 1 to 500
  770. ;---------------------
  771.  Sequenza.w
  772.  
  773. ;------------------------------------------------------------------
  774. ;questa variabile indica se l'evento musicale e' stato selezionato
  775. ;this variable states if the musical event has been selected
  776. ;------------------------------------------------------------
  777.  Selezionato.b
  778.  
  779. ;----------------------------------------------------------------------
  780. ;se l'evento musicale e' una nota, questa variabile indica se e' stata
  781. ; suonata: se il valore e' zero, la nota non e' stata ancora EseguiGliEventita; se il
  782. ; valore e' 1, il programma sta do la nota; se il valore e' 2, il
  783. ; programma ha smesso di suonare la nota
  784. ;if the musical event is a note, this variable states if it has been played:
  785. ; if the value is zero, the note has not been played yet; if the value is 1,
  786. ; the program is playing the note; if the value is 2, the program has finished
  787. ; to play the note
  788. ;------------------
  789.  Eseguito.b
  790.  
  791. ;------------------------------------------------------------------------------
  792. ;se l'evento musicale e' una nota, questa variabile ne indica in tic la durata
  793. ; nel tempo; valore utile da 0 a 2 miliardi e rotti (192 tic=nota di un quarto)
  794. ;if the event is a note, this variable states its duration in time by ticks;
  795. ;useful value from zero to over 2 billions (192 ticks=a quarter note)
  796. ;---------------------------------------------------------------------
  797.  Durata.l
  798.  
  799. ;--------------------------------------------------------------------------
  800. ;se l'evento musicale e'una nota, questa variabile ne indica l'intensita',
  801. ;cioe' il suo volume; se invece l'evento e' un controllo ne indica il valore
  802. ;if the musical event is a note, this variable states its intensity, that is
  803. ; its volume; if instead is a control it states its value
  804. ;---------------------------------------------------------
  805.  Valore.b
  806.  
  807. ;------------------------------------------------------------------------------
  808. ;se l'evento musicale e' una nota, questa variabile indica quale voce AMIGA e'
  809. ; stata usata per suonarla
  810. ;if the musical event si a note, this variable states witch AMIGA voice has
  811. ; been used to play it
  812. ;----------------------
  813.  VoceUsata.b
  814.  
  815. End NEWTYPE
  816.  
  817. DEFTYPE .EventoMusicale NotaSuonata
  818.  
  819. ;-----------------------------------------------------
  820. ;imposta il numero massimo di eventi musicali usabili
  821. ;sets the maximun musical events handling
  822. ;-----------------------------------------
  823. MassimoEventiMusicali.l=Min((FastFree-65536)/SizeOf .EventoMusicale,32768)
  824.  
  825. ;---------------------------------------------------------------------------
  826. ;crea le variabili array lista con la struttura del NEWTYPE .EventoMusicale
  827. ;creates the list array variables with the NEWTYPE .EventoMusicale structure
  828. ;----------------------------------------------------------------------------
  829. Dim List EventoMusicale.EventoMusicale(MassimoEventiMusicali-1)
  830.  
  831. ;-----------------------------------------------------------------
  832. ;questa variabile indica se e' stato attivato un dispoditivo MIDI
  833. ;this variable states if a MIDI device has been activated
  834. ;---------------------------------------------------------
  835. MIDIAttivato.l=0
  836.  
  837. ;--------------------------------------------------------------------------------
  838. ;questa variabile permette di mostrare i tasti da usare nell'editore sequenza la
  839. ; prima volta che vi ci si entra
  840. ;this variable permits to show the keys to use in the sequence editor the first
  841. ; time you enter it
  842. ;-------------------
  843. PrimaVoltaNellEditoreSequenza.b=True
  844.  
  845. ;--------------------------------------------------------------------------
  846. ;questa procedura imposta la fonte di caratteri Topaz8 per schermo, menu e
  847. ; requester, ma non per le finestre
  848. ;this procedure sets the characters font Topaz8 for screen, menus and
  849. ; requester, but not for windows
  850. ;--------------------------------
  851. Statement CaricaLaFonteDiCaratteriTopaz8{}
  852. SHARED AltezzaFonte
  853.  AltezzaFonte=8:LoadFont #FonteDiCaratteriTopaz8,"topaz.font",AltezzaFonte
  854. End Statement
  855.  
  856. ;-----------------------------------------------
  857. ;questa procedura imposta il parlato dell'AMIGA
  858. ;this procedure sets the AMIGA speech
  859. ;-------------------------------------
  860. Statement ImpostaIlParlatoDellAmiga{}
  861.  SetVoice 130,250,0,1,64,22200
  862. End Statement
  863.  
  864. ;-----------------------------------------------
  865. ;questa procedura carica le immagini delle note
  866. ;this procedure loads the note images
  867. ;-------------------------------------
  868. Statement CaricaLeImmaginiDelleNote{}
  869.  BitMap 0,126,16,1
  870.  LoadBitMap 0,"Notes.2Cols"
  871.  GetaShape 0,0,0,22,16
  872.  GetaShape 1,23,0,12,16
  873.  GetaShape 2,36,0,12,16
  874.  GetaShape 3,49,0,17,16
  875.  GetaShape 4,67,0,17,16
  876.  GetaShape 5,85,0,17,16
  877.  GetaShape 6,103,0,17,16
  878.  GetaShape 7,121,0,5,16
  879.  Free BitMap 0
  880. End Statement
  881.  
  882. n;---------------------------------------------
  883. ;questa procedura attiva la trasmissione MIDI
  884. ;this procedure activates the MIDI transmission
  885. ;-----------------------------------------------
  886. Statement AttivaMIDI{}
  887. SHARED MIDIAttivato
  888.  Use Window #FinestraPrincipale
  889.  WJam #DueColoriConSfondoPieno
  890.  Repeat
  891.   If MIDIAttivato=True Then CloseSerial 0
  892.   WLocate 0,0:WColour 0,0:Print SPACE$(80)
  893.   WLocate 0,0:WColour 3:Print "Please type your MIDI device name>"
  894.   DispositivoMIDI$=StripLead$(StripTrail$(Edit$("serial.device",35),Asc(" ")),Asc(" "))
  895.   WLocate 0,0:Print SPACE$(80)
  896.   If DispositivoMIDI$<>""
  897.    MIDIAttivato=OpenSerial(DispositivoMIDI$,0,31250,16)
  898.    If MIDIAttivato=0
  899.     EZRequest "AmySequencer message","Unable to open MIDI|on "+DispositivoMIDI$,"OK"
  900.    Else
  901.     MIDIAttivato=True
  902.    EndIf
  903.   EndIf
  904.  Until MIDIAttivato=True
  905.  EZRequest "AmySequencer message","MIDI has been activated|on "+DispositivoMIDI$,"OK"
  906.  WJam #UnColoreConSfondoTrasparente
  907. End Statement
  908.  
  909. ;-------------------------------------------------
  910. ;questa procedura cambia la misurazione del tempo
  911. ;this procedure change the time misuration
  912. ;------------------------------------------
  913. Statement CambiaLaMisuraDelTempo{}
  914. SHARED Battiti
  915. SHARED Misure
  916.  Use Window #FinestraPrincipale
  917.  WJam #DueColoriConSfondoPieno
  918.  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  919.  WLocate 0,0:WColour 3:Print "Please type the basic time beat>"
  920.  Battiti=Val(StripLead$(StripTrail$(Edit$("4",35),Asc(" ")),Asc(" ")))
  921.  Battiti=Min(Max(Battiti,1),16)
  922.  WLocate 0,0:Print SPACE$(80)
  923.  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  924.  WLocate 0,0:WColour 3:Print "Please type the basic time measures>"
  925.  Misure=Val(StripLead$(StripTrail$(Edit$("4",35),Asc(" ")),Asc(" ")))
  926.  Misure=Min(Max(Misure,1),8)
  927.  WJam #UnColoreConSfondoTrasparente
  928. End Statement
  929.  
  930. ;--------------------------------------------------------
  931. ;questa procedura mostra gli eventi musicali disponibili
  932. ;this procedure shows the available musical events
  933. ;--------------------------------------------------
  934. Statement MostraGliEventiMusicaliDisponibili{}
  935. SHARED MassimoEventiMusicali
  936. SHARED Sequenza()
  937. SHARED Sequenze
  938. SHARED TotaleEventiMusicali
  939.  TotaleEventiMusicali=0
  940.  For Sequenza.w=0 To #MassimoSequenze-1
  941.   TotaleEventiMusicali+Sequenza(Sequenza)\Eventi
  942.  Next Sequenza
  943.  Use Window #FinestraPrincipale
  944.  WLocate 0,0:WColour 3:Print MassimoEventiMusicali," events allocated, ",TotaleEventiMusicali," event"
  945.  If TotaleEventiMusicali<>1 Then Print "s"
  946.  Print " used, "
  947.  If Sequenze>0
  948.   Print Str$(Sequenze)," sequence":If Sequenze>1 Then Print "s"
  949.  Else
  950.   Print "no sequences"
  951.  EndIf
  952. End Statement
  953.  
  954. ;----------------------------------------------
  955. ;questa procedura mostra il tempo delle misure
  956. ;this procedure shows the measures' tempo
  957. ;-----------------------------------------
  958. Statement MostraIlTempo{Tempo.b,Modo.b}
  959. SHARED AltezzaInternaFinestraEditoreSequenza
  960. SHARED AltezzaInternaFinestraPrincipale
  961. SHARED LarghezzaInternaFinestraPrincipale
  962. SHARED XPosSfondoTempo
  963. SHARED YPosSfondoTempo
  964.  If Modo=#EseguiGliEventiDallEditoreSequenza
  965.   XMessaggio.w=16*16+8*3+8*4+8*6
  966.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  967.   WJam #DueColoriConSfondoPieno
  968.   WLocate XMessaggio,YMessaggio
  969.   WColour 1,0
  970.   Print SPACE$(80-XMessaggio/8)
  971.   WLocate XMessaggio,YMessaggio
  972.  EndIf
  973.  If Modo=#EseguiGliEventiDallaFinestraPrincipale
  974.   WBlit 8,XPosSfondoTempo,YPosSfondoTempo
  975.   WJam #UnColoreConSfondoTrasparente
  976.   WLocate (80-Len("Tempo=00/00"))*8,AltezzaInternaFinestraPrincipale-8-8
  977.   WColour 3,0
  978.  EndIf
  979.  Format "00":Print "Tempo=",Str$(Tempo MOD 16+1),"/",Str$(Tempo/16+1):Format ""
  980. End Statement
  981.  
  982. ;----------------------------------------------------------------------------
  983. ;questa procedura crea una tabella di riconoscimento delle note, memorizzata
  984. ; nell'array TipoDiNota()
  985. ;this procedure crates a referring note recognition table, stored in the
  986. ; TipoDiNota() array (that means Note Kind)
  987. ;-------------------------------------------
  988. Statement ImpostaIlTipoDiNota{Nota.b}
  989. SHARED TipoDiNota()
  990.  
  991. ;--------------------------------------------
  992. ;questa variabile indica l'ottava della nota
  993. ;this variable state the note octave
  994. ;------------------------------------
  995.  OttavaDellaNota.b=Nota/12
  996.  
  997.  TipoDiNota(Nota)\Ottava=OttavaDellaNota
  998.  
  999. ;-----------------------------------------------------------------------
  1000. ;questa variabile indica a quali delle 12 note dodici note fondamentali
  1001. ; corrisponde la nota corrente
  1002. ;this variable marks which of 12 fundamental notes corresponds the current
  1003. ; note
  1004. ;------
  1005.  NotaNellOttava.b=Nota MOD 12
  1006.  
  1007.  Select NotaNellOttava
  1008.  
  1009. ;------------------
  1010. ;la nota e' un Do?
  1011. ;is the given note a C?
  1012. ;-----------------------
  1013.  Case 0
  1014.   TipoDiNota(Nota)\NomeItaliano="Do"
  1015.   TipoDiNota(Nota)\NomeInglese="C"
  1016.   TipoDiNota(Nota)\Diesis=False
  1017.  
  1018. ;-------------------------------
  1019. ;la nota e' un Do diesis (Do#)?
  1020. ;is the given note a C diesis (C#)?
  1021. ;-----------------------------------
  1022.  Case 1
  1023.   TipoDiNota(Nota)\NomeItaliano="Do#"
  1024.   TipoDiNota(Nota)\NomeInglese="C#"
  1025.   TipoDiNota(Nota)\Diesis=True
  1026.  
  1027. ;------------------
  1028. ;la nota e' un Re?
  1029. ;is the given note a D?
  1030. ;-----------------------
  1031.  Case 2
  1032.   TipoDiNota(Nota)\NomeItaliano="Re"
  1033.   TipoDiNota(Nota)\NomeInglese="D"
  1034.   TipoDiNota(Nota)\Diesis=False
  1035.  
  1036. ;-------------------------------
  1037. ;la nota e' un Re diesis (Re#)?
  1038. ;is the given note a D diesis (D#)?
  1039. ;-----------------------------------
  1040.  Case 3
  1041.   TipoDiNota(Nota)\NomeItaliano="Re#"
  1042.   TipoDiNota(Nota)\NomeInglese="D#"
  1043.   TipoDiNota(Nota)\Diesis=True
  1044.  
  1045. ;------------------
  1046. ;la nota e' un Mi?
  1047. ;is the given note a E?
  1048. ;-----------------------
  1049.  Case 4
  1050.   TipoDiNota(Nota)\NomeItaliano="Mi"
  1051.   TipoDiNota(Nota)\NomeInglese="E"
  1052.   TipoDiNota(Nota)\Diesis=False
  1053.  
  1054. ;------------------
  1055. ;la nota e' un Fa?
  1056. ;is the given note a F?
  1057. ;-----------------------
  1058.  Case 5
  1059.   TipoDiNota(Nota)\NomeItaliano="Fa"
  1060.   TipoDiNota(Nota)\NomeInglese="F"
  1061.   TipoDiNota(Nota)\Diesis=False
  1062.  
  1063. ;-------------------------------
  1064. ;la nota e' un Fa diesis (Fa#)?
  1065. ;is the given note a F diesis (F#)?
  1066. ;-----------------------------------
  1067.  Case 6
  1068.   TipoDiNota(Nota)\NomeItaliano="Fa#"
  1069.   TipoDiNota(Nota)\NomeInglese="F#"
  1070.   TipoDiNota(Nota)\Diesis=True
  1071.  
  1072. ;-------------------
  1073. ;la nota e' un Sol?
  1074. ;is the given note a G?
  1075. ;-----------------------
  1076.  Case 7
  1077.   TipoDiNota(Nota)\NomeItaliano="Sol"
  1078.   TipoDiNota(Nota)\NomeInglese="G"
  1079.   TipoDiNota(Nota)\Diesis=False
  1080.  
  1081. ;---------------------------------
  1082. ;la nota e' un Sol diesis (Sol#)?
  1083. ;is the given note a G diesis (G#)?
  1084. ;-----------------------------------
  1085.  Case 8
  1086.   TipoDiNota(Nota)\NomeItaliano="Sol#"
  1087.   TipoDiNota(Nota)\NomeInglese="G#"
  1088.   TipoDiNota(Nota)\Diesis=True
  1089.  
  1090. ;------------------
  1091. ;la nota e' un La?
  1092. ;is the given note an A?
  1093. ;------------------------
  1094.  Case 9
  1095.   TipoDiNota(Nota)\NomeItaliano="La"
  1096.   TipoDiNota(Nota)\NomeInglese="A"
  1097.   TipoDiNota(Nota)\Diesis=False
  1098.  
  1099. ;-------------------------------
  1100. ;la nota e' un La diesis (La#)?
  1101. ;is the given note an A diesis (A#)?
  1102. ;------------------------------------
  1103.  Case 10
  1104.   TipoDiNota(Nota)\NomeItaliano="La#"
  1105.   TipoDiNota(Nota)\NomeInglese="A#"
  1106.   TipoDiNota(Nota)\Diesis=True
  1107.  
  1108. ;------------------
  1109. ;la nota e' un Si?
  1110. ;is the given note a B?
  1111. ;-----------------------
  1112.  Case 11
  1113.   TipoDiNota(Nota)\NomeItaliano="Si"
  1114.   TipoDiNota(Nota)\NomeInglese="B"
  1115.   TipoDiNota(Nota)\Diesis=False
  1116.  
  1117.  End Select
  1118. End Statement
  1119.  
  1120. Statement CalcolaLaFrequenzaEdIlPeriodoDelleNote{}
  1121. SHARED PeriFreq()
  1122. SHARED DistanzaSemitono
  1123. ;--------------------------------------------------------------------------------
  1124. ;per ottenere la frequenza di tutte le 128 note, si parte dal La della 2a ottava
  1125. ; (la prima e' l'ottava zero), la cui frequenza e' nota e la si moltiplica o
  1126. ; divide per la distanza minima tra due note che e' il semitono; per ottenere il
  1127. ; periodo si divide una delle costanti di temporizzazione, a seconda che il
  1128. ; il proprio AMIGA usi uno schermo PAL o NTSC, per la frequenza della nota; queste
  1129. ; costanti sono riportate sul MANUALE DI RIFERIMENTO PER L'HARDWARE AMIGA.
  1130. ;to obtain all 128 notes it starts from the A from the 3rd octave (the 1st is the
  1131. ; zero octave) that has a known frequency, and it multiply or divide this for the
  1132. ; minimum distance between two notes that is the semitone; to obtain the period it
  1133. ; divides one of the timing constants, depending on your AMIGA uses a PAL or NTSC
  1134. ; screen, for the note frequency; these constants are reported the AMIGA HARDWARE
  1135. ; REFERENCE MANUAL
  1136. ;------------------
  1137. PeriFreq(45)\Frequenza=440
  1138. If NTSC=True
  1139.  PeriFreq(45)\Periodo=#TemporizzazioneNTSC/PeriFreq(45)\Frequenza
  1140. Else
  1141.  PeriFreq(45)\Periodo=#TemporizzazionePAL/PeriFreq(45)\Frequenza
  1142. EndIf
  1143. ImpostaIlTipoDiNota{45}
  1144.  
  1145. For Nota.w=46 To 127
  1146.  PeriFreq(Nota)\Frequenza=PeriFreq(Nota-1)\Frequenza*DistanzaSemitono
  1147.  If NTSC=True
  1148.   PeriFreq(Nota)\Periodo=#TemporizzazioneNTSC/PeriFreq(Nota)\Frequenza
  1149.  Else
  1150.   PeriFreq(Nota)\Periodo=#TemporizzazionePAL/PeriFreq(Nota)\Frequenza
  1151.  EndIf
  1152.  ImpostaIlTipoDiNota{Nota}
  1153. Next Nota
  1154.  
  1155. For Nota=44 To 0 Step -1
  1156.  PeriFreq(Nota)\Frequenza=PeriFreq(Nota+1)\Frequenza/DistanzaSemitono
  1157.  If NTSC=True
  1158.   PeriFreq(Nota)\Periodo=#TemporizzazioneNTSC/PeriFreq(Nota)\Frequenza
  1159.  Else
  1160.   PeriFreq(Nota)\Periodo=#TemporizzazionePAL/PeriFreq(Nota)\Frequenza
  1161.  EndIf
  1162.  ImpostaIlTipoDiNota{Nota}
  1163. Next Nota
  1164. End Statement
  1165.  
  1166. ;-----------------------------------------------------------------------------
  1167. ;la seguente procedura converte un valore temporale da tic in battute, quarti
  1168. ; e tic; la variabile OrigineZero serve per la differente visualizzazione
  1169. ; della durata delle note che parte da zero
  1170. ;the following procedure converts a time value from tcksin bars, quarters and
  1171. ; ticks; the OrigineZero variable is used for the different note length
  1172. ; displaying that starts from zero
  1173. ;----------------------------------
  1174. Statement ConvertiIlTempoInBattute{Tempo.l,Battiti.b,Misure.b,OrigineZero.b}
  1175.  If OrigineZero=True
  1176.   Battute.b=Tempo/(192*4.0/Misure*Battiti)
  1177.   Battiti.b=(Tempo/(192/(Misure/4.0))) MOD Battiti
  1178.  Else
  1179.   Battute=Tempo/(192*4.0/Misure*Battiti)+1
  1180.   Battiti=(Tempo/(192/(Misure/4.0))) MOD Battiti+1
  1181.  EndIf
  1182.  Print Battute,".",Battiti
  1183.  Tic.w=Tempo MOD (192/(Misure/4.0))
  1184.  If Tic>0 Then Print ".",Tic
  1185. End Statement
  1186.  
  1187. ;-------------------------------------------------
  1188. ;questa procedura imposta le barre di scorrimento
  1189. ;this procedure sets sliders
  1190. ;----------------------------
  1191. Statement ImpostaSlider{Slider.l,XPos.w,YPos.w,Orientamento$,Parametri.l,ListaGadgetSlider.l}
  1192. SHARED XLunSlider
  1193. SHARED YLunSlider
  1194.  Orientamento$=UCase$(Orientamento$)
  1195.  If Orientamento$="HORIZONTAL" Then Parametri+#MovimentoOrizzontale
  1196.  If Orientamento$="VERTICAL" Then Parametri+#MovimentoVerticale
  1197.  PropGadget ListaGadgetSlider,XPos,YPos,Parametri,Slider,XLunSlider,YLunSlider
  1198. End Statement
  1199.  
  1200. ;--------------------------------------------------
  1201. ;questa procedura gestisce le barre di scorrimento
  1202. ;this procedure manages the sliders
  1203. ;-----------------------------------
  1204. Statement MostraSlider{Slider.l,ValoreDato.l,ValoreMassimo.l,Orientamento$,ListaGadgetSlider.l,FinestraSlider.l}
  1205.  Orientamento$=UCase$(Orientamento$)
  1206.  If Orientamento$="HORIZONTAL"
  1207.   SetHProp ListaGadgetSlider,Slider,ValoreDato/ValoreMassimo,1/ValoreMassimo
  1208.  EndIf
  1209.  If Orientamento$="VERTICAL"
  1210.   SetVProp ListaGadgetSlider,Slider,ValoreDato/ValoreMassimo,1/ValoreMassimo
  1211.  EndIf
  1212.  Redraw FinestraSlider,Slider
  1213. End Statement
  1214.  
  1215. ;--------------------------------------------------
  1216. ;questa procedura gestisce le barre di scorrimento
  1217. ;this procedure manage the sliders
  1218. ;----------------------------------
  1219. Function .l ValoreSlider{Slider.l,ValoreMassimo.l,LunghezzaSlider.l,Orientamento$,ListaGadgetSlider.l}
  1220.  Orientamento$=UCase$(Orientamento$)
  1221.  If Orientamento$="HORIZONTAL"
  1222.   ValoreSlider.f=HPropPot(ListaGadgetSlider,Slider)*ValoreMassimo
  1223.   ValoreIndicatoDalTopo.w=EMouseX*ValoreMassimo/LunghezzaSlider
  1224.  EndIf
  1225.  If Orientamento$="VERTICAL"
  1226.   ValoreSlider=VPropPot(ListaGadgetSlider,Slider)*ValoreMassimo
  1227.   ValoreIndicatoDalTopo=EMouseY*ValoreMassimo/LunghezzaSlider
  1228.  EndIf
  1229.  ValoreIndicatoDalloSlider.l=Int(ValoreSlider)
  1230.  If ValoreIndicatoDalTopo>ValoreIndicatoDalloSlider Then ValoreIndicatoDalloSlider+1
  1231.  If ValoreIndicatoDalTopo<ValoreIndicatoDalloSlider Then ValoreIndicatoDalloSlider-1
  1232.  ValoreIndicatoDalloSlider=Min(Max(ValoreIndicatoDalloSlider,0),ValoreMassimo)
  1233.  Function Return ValoreIndicatoDalloSlider
  1234. End Function
  1235.  
  1236. ;--------------------------------------------------------------
  1237. ;questa procedura cancella il file storico dei progetti aperti
  1238. ;this procedure clears the loaded projects history file
  1239. ;-------------------------------------------------------
  1240. Statement CancellaLaStoriaDeiProgettiAperti{}
  1241. SHARED ProgettoAperto$()
  1242. SHARED StoriaDeiProgettiAperti
  1243. SHARED VoceMenuEsci
  1244.  KillFile "ProjectsHistory"
  1245.  VoceMenuEsci=4
  1246.  StoriaDeiProgettiAperti=False
  1247.  For ProgettoAperto.b=0 To 4
  1248.   ProgettoAperto$(ProgettoAperto)=""
  1249.  Next ProgettoAperto
  1250. End Statement
  1251.  
  1252. ;------------------------------------------------------------
  1253. ;questa procedura carica il file storico dei progetti aperti
  1254. ;this procedure loads the loaded projects history file
  1255. ;------------------------------------------------------
  1256. Statement CaricaLaStoriaDeiProgettiAperti{}
  1257. SHARED ProgettoAperto$()
  1258. SHARED StoriaDeiProgettiAperti
  1259. SHARED VoceMenuEsci
  1260.  StoriaDeiProgettiAperti=ReadFile(0,"ProjectsHistory")
  1261.  If StoriaDeiProgettiAperti=True
  1262.   FileInput 0
  1263.   ProgettoAperto=0
  1264.   Repeat
  1265.    Dato$=Inkey$
  1266.    If Dato$=Chr$(10)
  1267.     ProgettoAperto+1
  1268.     VoceMenuEsci+1
  1269.    Else
  1270.     ProgettoAperto$(ProgettoAperto)+Dato$
  1271.    EndIf
  1272.   Until Dato$=""
  1273.   CloseFile 0
  1274.   PopInput
  1275.  EndIf
  1276. End Statement
  1277.  
  1278. ;------------------------------------------------------------------
  1279. ;crea la bitmap per l'immagine di sfondo della finestra principale
  1280. ;creates the bitmap for the background pic of the main window
  1281. ;-------------------------------------------------------------
  1282. Statement CreaLaBitmapPerLImmagineDiSfondo{}
  1283.  
  1284. ;----------------------------------------
  1285. ;crea la bitmap per l'immagine di sfondo
  1286. ;creates the bitmap for the background pic
  1287. ;------------------------------------------
  1288.  BitMap #BitmapImmagineDiSfondo,640,240,4
  1289.  
  1290. End Statement
  1291.  
  1292. ;-------------------------------------------------------------------
  1293. ;carica l'immagine di sfondo della finestra principale nella bitmap
  1294. ;loads the background pic of the main window into the bitmap
  1295. ;------------------------------------------------------------
  1296. Statement CaricaLImmagineDiSfondoNellaBitmap{}
  1297. SHARED ColoriOriginali
  1298.  
  1299. If ColoriOriginali=True
  1300.  ImmagineDiSfondo$="BackPicOC.16Cols"
  1301. Else
  1302.  ImmagineDiSfondo$="BackPic.16Cols"
  1303. EndIf
  1304.  
  1305. ;----------------------------------------------------------------------------
  1306. ;carica l'immagine di sfondo per la finestra principale nella bitmap creata
  1307. ; per questa
  1308. ;loads the main window background image into the bitmap creted for it
  1309. ;---------------------------------------------------------------------
  1310.  LoadBitMap #BitmapImmagineDiSfondo,ImmagineDiSfondo$,#TavolozzaDeiColori
  1311.  
  1312. ;---------------------------------------------------
  1313. ;usa la tavolozza dei colori dell'immagine caricata
  1314. ;use loaded image colours palette
  1315. ;---------------------------------
  1316.  Use Palette #TavolozzaDeiColori
  1317.  
  1318. End Statement
  1319.  
  1320. ;------------------------------------
  1321. ;questa procedura imposta lo schermo
  1322. ;this procedure sets the screen
  1323. ;-------------------------------
  1324. Statement ImpostaLoSchermo{}
  1325. SHARED AltezzaFonte
  1326. SHARED AltezzaSchermo
  1327. SHARED LarghezzaSchermo
  1328. SHARED SequenzeVisibili
  1329.  
  1330. ;--------------------------------------
  1331. ;imposta la fonte di caratteri globale
  1332. ;sets the global characters font
  1333. ;--------------------------------
  1334.  Use IntuiFont #FonteDiCaratteriTopaz8
  1335.  
  1336. ;------------------------------------
  1337. ;inizializza la tavolozza dei colori
  1338. ;initializes the colours palette
  1339. ;--------------------------------
  1340.  InitPalette #TavolozzaDeiColori,16
  1341.  
  1342. ;-------------------------------
  1343. ;carica i colori per lo schermo
  1344. ;loads colours for screen
  1345. ;-------------------------
  1346. ; For Colore.b=0 To 15
  1347. ;  Read Rosso.b
  1348. ;  Read Verde.b
  1349. ;  Read Blu.b
  1350. ;  PalRGB #TavolozzaDeiColori,Colore,Rosso,Verde,Blu
  1351. ; Next Colore
  1352.  
  1353. ;----------------------------------------------------------------
  1354. ;imposta le penne dello schermo con i migliori colori (ROM 2.0+)
  1355. ;sets screen pens with best colours (ROM 2.0+)
  1356. ;----------------------------------------------
  1357.  ScreenPens 3,2,0,1,3,1,2
  1358.  
  1359. ;------------------------------------------------
  1360. ;apre lo schermo in alta risoluzione a 16 colori
  1361. ;opens high resolution screen with 16 colours
  1362. ;---------------------------------------------
  1363.  Screen #Schermo,4+8,"AmySequencer by Stefano Maria Regattin"
  1364.  
  1365. ;-----------------------------
  1366. ;usa la tavolozza dei colori
  1367. ;use colours palette
  1368. ;--------------------
  1369.  Use Palette #TavolozzaDeiColori
  1370.  
  1371. ;-------------------------------------------------------------------------------
  1372. ;questa variabile contiene l'indirizzo di memoria della struttura dello schermo
  1373. ;this variable retains the screen structure memory address
  1374. ;----------------------------------------------------------
  1375.  IndirizzoSchermo.l=Peek.l(Addr Screen(0))
  1376.  
  1377. ;----------------------------------------------------------
  1378. ;questa variabile contiene la vera larghezza Dello schermo
  1379. ;this variable retains the true screen width
  1380. ;--------------------------------------------
  1381.  LarghezzaSchermo=Peek.w(IndirizzoSchermo+12)
  1382.  
  1383. ;--------------------------------------------------------
  1384. ;questa variabile contiene la vera altezza dello schermo
  1385. ;this variable retains the true screen height
  1386. ;---------------------------------------------
  1387.  AltezzaSchermo=Peek.w(IndirizzoSchermo+14)
  1388.  
  1389. ;---------------------------------------------------------------------
  1390. ;questa variabile indica il massimo numero di sequenze visualizzabili
  1391. ;this variable states the displayed sequences maximum number
  1392. ;------------------------------------------------------------
  1393.  SequenzeVisibili.b=(AltezzaSchermo-(AltezzaFonte+3)-8-8-8)/8
  1394.  
  1395. End Statement
  1396.  
  1397. ;-----------------------------------------------------------------------
  1398. ;questa procedura mostra l'immagine di sfondo nella finestra principale
  1399. ;this procedure shows the  background pic into the main window
  1400. ;--------------------------------------------------------------
  1401. Statement MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  1402.  
  1403. ;---------------------------------------------------------
  1404. ;copia l'immamgine dalla bitmap nella finestra principale
  1405. ;copies the pic from the bitmap into the main window
  1406. ;----------------------------------------------------
  1407.  BitMaptoWindow #BitmapImmagineDiSfondo,#FinestraPrincipale,0,0,0,0,640,240
  1408.  
  1409. End Statement
  1410.  
  1411. Statement CopiaLoSfondoSottoAlTempo{}
  1412. SHARED AltezzaInternaFinestraPrincipale
  1413. SHARED LarghezzaInternaFinestraPrincipale
  1414. SHARED XPosSfondoTempo
  1415. SHARED YPosSfondoTempo
  1416.  XPosSfondoTempo.w=LarghezzaInternaFinestraPrincipale-1-Len("Tempo=00/00")*8
  1417.  YPosSfondoTempo.w=AltezzaInternaFinestraPrincipale-8-8
  1418.  XLunSfondoTempo.b=Len("Tempo=00/00")*8
  1419.  YLunSfondoTempo.b=8
  1420.  GetaShape 8,XPosSfondoTempo,YPosSfondoTempo,XLunSfondoTempo,YLunSfondoTempo
  1421. End Statement
  1422.  
  1423. ;-------------------------------------------------------------------------------
  1424. ;Questa procedura imposta la finestra principale invisibile e reimposta il menu
  1425. ; principale
  1426. ;this procedure sets the main invisible window and resets the main menu
  1427. ;-----------------------------------------------------------------------
  1428. Statement ImpostaLaFinestraPrincipale{}
  1429. SHARED AltezzaFonte
  1430. SHARED AltezzaInternaFinestraPrincipale
  1431. SHARED AltezzaSchermo
  1432. SHARED AreaInvisibileDelMotivo
  1433. SHARED BattuteAlMinuto
  1434. SHARED FineMotivo
  1435. SHARED FinestraPrincipaleAperta
  1436. SHARED LarghezzaInternaFinestraPrincipale
  1437. SHARED LarghezzaSchermo
  1438. SHARED ProgettoAperto$()
  1439. SHARED Sequenze
  1440. SHARED SequenzeVisibili
  1441. SHARED StoriaDeiProgettiAperti
  1442. SHARED TicPerCinquantesimoDiSecondo
  1443. SHARED VoceMenuEsci
  1444. SHARED XLunSlider
  1445. SHARED XSequenzeVisibili
  1446. SHARED YLunSlider
  1447. SHARED YSequenzeVisibili
  1448.  
  1449. ;-----------------------------------------------
  1450. ;se la finestra era gia' stato aperto la chiude
  1451. ;if window was opened it close it
  1452. ;---------------------------------
  1453.  If FinestraPrincipaleAperta=True
  1454.   BeepScreen #Schermo
  1455.   Free GadgetList #ListaGadgetPrincipale
  1456.   Free MenuList #ListaMenuPrincipale
  1457.   CloseWindow #FinestraPrincipale
  1458.  EndIf
  1459.  
  1460. ;-----------------------------------------------------------------------
  1461. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  1462. ;sets text menu colour to the brightest available
  1463. ;-------------------------------------------------
  1464.  MenuColour 3
  1465.  
  1466. ;-------------------------
  1467. ;imposta il menu' Project
  1468. ;sets Project menu
  1469. ;------------------
  1470.  MenuTitle #ListaMenuPrincipale,0,"Project"
  1471.  MenuItem #ListaMenuPrincipale,0,0,0,"New"
  1472.  MenuItem #ListaMenuPrincipale,0,0,1,"Load"
  1473.  MenuItem #ListaMenuPrincipale,0,0,2,"Save"
  1474.  MenuItem #ListaMenuPrincipale,0,0,3,"Save as"
  1475.  If StoriaDeiProgettiAperti=True
  1476.   For ProgettoAperto.b=4 To VoceMenuEsci-1
  1477.    MenuItem 0,0,0,ProgettoAperto,ProgettoAperto$(ProgettoAperto-4)
  1478.   Next ProgettoAperto
  1479.  EndIf
  1480.  MenuItem 0,0,0,VoceMenuEsci,"Quit"
  1481.  
  1482. ;--------------------------
  1483. ;imposta il menu' Controls
  1484. ;sets Controls menu
  1485. ;------------------
  1486.  MenuTitle #ListaMenuPrincipale,1,"Controls"
  1487.  MenuItem #ListaMenuPrincipale,0,1,0,"Play"
  1488.  
  1489. ;-------------------------
  1490. ;imposta il menu' Windows
  1491. ;sets Windows menu
  1492. ;------------------
  1493.  MenuTitle #ListaMenuPrincipale,2,"Windows"
  1494.  MenuItem #ListaMenuPrincipale,0,2,0,"Sounds Editor"
  1495.  MenuItem #ListaMenuPrincipale,0,2,1,"Sequence Editor"
  1496.  
  1497. ;-----------------------
  1498. ;imposta il menu' Prefs
  1499. ;sets Prefs menu
  1500. ;----------------
  1501.  MenuTitle #ListaMenuPrincipale,3,"Prefs"
  1502.  MenuItem #ListaMenuPrincipale,0,3,0,"Set MIDI device"
  1503.  MenuItem #ListaMenuPrincipale,1,3,1,"  Original colours"
  1504.  MenuItem #ListaMenuPrincipale,0,3,2,"Clear projects history"
  1505.  
  1506. ;-------------------------------------------------------------------
  1507. ;apre la finestra principale per ricavarne la larghezza e l'altezza
  1508. ;opens main window to obtain its width and height
  1509. ;-------------------------------------------------
  1510.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  1511.  TipoFinestra.l=#FinestraDiSfondo+#FinestraSenzaBordi+#FinestraAttivata
  1512.  Window #FinestraPrincipale,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1
  1513.  
  1514.  MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  1515.  
  1516. ;-------------------------------------------------------------------------
  1517. ;questa variabile conserva la larghezza interna della finestra principale
  1518. ;this variable stores the inner witdh of the main window
  1519. ;--------------------------------------------------------
  1520.  LarghezzaInternaFinestraPrincipale.w=InnerWidth
  1521.  
  1522. ;----------------------------------------------------------------------
  1523. ;questa variabile conserva l'altezza interna della finestra principale
  1524. ;this variable stores the inner height of the main window
  1525. ;---------------------------------------------------------
  1526.  AltezzaInternaFinestraPrincipale.w=InnerHeight
  1527.  
  1528. ;------------------------------------------------------------------------------
  1529. ;copia in memoria lo sfondo della posizione a video dell'indicazione del tempo
  1530. ;copies into memory the time indication's on screen position background
  1531. ;-----------------------------------------------------------------------
  1532.  CopiaLoSfondoSottoAlTempo{}
  1533.  
  1534.  CloseWindow #FinestraPrincipale
  1535.  
  1536. ;----------------------------------------------------------------------
  1537. ;imposta la barra di scorrimento che regola la velocita' di esecuzione
  1538. ;sets the slider that tunes the execution velocity
  1539. ;_-------------------------------------------------
  1540.  XLunSlider=LarghezzaInternaFinestraPrincipale
  1541.  YLunSlider=8
  1542.  ImpostaSlider{1,0,AltezzaInternaFinestraPrincipale-8,"HORIZONTAL",0,#ListaGadgetPrincipale}
  1543.  
  1544. ;-----------------------------------------------------------------------
  1545. ;imposta la barra di scorrimento che serve per visualizzare le sequenze
  1546. ;sets the slider that is used to shows the sequences
  1547. ;_---------------------------------------------------
  1548.  XLunSlider=16
  1549.  YLunSlider=SequenzeVisibili*8
  1550.  ImpostaSlider{2,0,8,"VERTICAL",0,#ListaGadgetPrincipale}
  1551.  
  1552. ;-----------------------------------------------------------------------
  1553. ;imposta la barra di scorrimento che serve per visualizzare le sequenze
  1554. ;sets the slider that is used to shows the sequences
  1555. ;_---------------------------------------------------
  1556.  XLunSlider=LarghezzaInternaFinestraPrincipale-16
  1557.  YLunSlider=4
  1558.  ImpostaSlider{3,16,8+SequenzeVisibili*8,"HORIZONTAL",0,#ListaGadgetPrincipale}
  1559.  
  1560. ;------------------------------------------------------------------------------
  1561. ;apre la finestra principale solo per il menu' come invisibile e ci attacca la
  1562. ; lista dei gadget principale
  1563. ;opens main window for menu usage only as invisible and it attaches the main
  1564. ; gadget list
  1565. ;-------------
  1566.  Window #FinestraPrincipale,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1,#ListaGadgetPrincipale
  1567.  
  1568. ;-------------------------------
  1569. ;attacca il menu' alla finestra
  1570. ;attaches menu to window
  1571. ;------------------------
  1572.  SetMenu #ListaMenuPrincipale
  1573.  
  1574. ;----------------------------------------------
  1575. ;imposta la fonte di caratteri per la finestra
  1576. ;sets the font for the window
  1577. ;-----------------------------
  1578.  WindowFont #FonteDiCaratteriTopaz8
  1579.  
  1580.  WJam #UnColoreConSfondoTrasparente
  1581.  
  1582.  MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  1583.  
  1584. ;-------------------------------------------------------------------------
  1585. ;imposta la barra di scorrimento della velocita' di esecuzione delle note
  1586. ;sets the notes execution velocity slider
  1587. ;-----------------------------------------
  1588.  MostraSlider{1,BattuteAlMinuto-10,300-9,"HORIZONTAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  1589.  
  1590. ;-------------------------------------------------------------------
  1591. ;mostra la velocita' di esecuzione delle note in battute per minuto
  1592. ;shows the execution velocity in bar per minute
  1593. ;-----------------------------------------------
  1594.  WLocate 0,AltezzaInternaFinestraPrincipale-8-8:WColour 3
  1595.  Print "BPM>",BattuteAlMinuto," Ticks/50th>",TicPerCinquantesimoDiSecondo
  1596.  
  1597. ;----------------------------
  1598. ;mostra le sequenze visibili
  1599. ;shows the visible sequences
  1600. ;----------------------------
  1601.  MostraSlider{2,YSequenzeVisibili,#MassimoSequenze-SequenzeVisibili,"VERTICAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  1602.  
  1603. ;-------------------------------------
  1604. ;calcola l'area invisibile del motivo
  1605. ;evaluate the motive's invisible area
  1606. ;_------------------------------------
  1607.  AreaInvisibileDelMotivo=Max(FineMotivo-(LarghezzaInternaFinestraPrincipale-16),0)
  1608.  
  1609. ;----------------------------
  1610. ;mostra le sequenze visibili
  1611. ;shows the visible sequences
  1612. ;----------------------------
  1613.  MostraSlider{3,XSequenzeVisibili,AreaInvisibileDelMotivo,"HORIZONTAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  1614.  
  1615.  MostraIlTempo{(#MisureDiBase-1)*16+#BattitiDiBase-1,#EseguiGliEventiDallaFinestraPrincipale}
  1616.  
  1617. ;-----------------------------------------------------------------
  1618. ;le finestre di richiesta sono assegnate alla finestra principale
  1619. ;the request windows are assigned to main window
  1620. ;------------------------------------------------
  1621.  EZOutput #FinestraPrincipale
  1622.  
  1623.  FinestraPrincipaleAperta=True
  1624.  
  1625. End Statement
  1626.  
  1627. ;--------------------------------------------------------------------------
  1628. ;questa procedura per ora legge solo il nome di un file e o inserisce nel
  1629. ; menu principale; dovrebbe caricare un progetto di AmySequencer
  1630. ;this procedure till now only reads a file name and put it into the main menu
  1631. ; it should load an AmySequencer project
  1632. ;----------------------------------------
  1633. Statement CaricaUnProgetto{}
  1634. SHARED ProgettoAperto$()
  1635. SHARED StoriaDeiProgettiAperti
  1636. SHARED VoceMenuEsci
  1637.  MaxLen P$=160
  1638.  MaxLen F$=64
  1639.  ProgettoAperto$=FileRequest$("Load AmySequencer project",P$,F$)
  1640.  If ProgettoAperto$<>""
  1641.   For ProgettoAperto.b=0 To 4
  1642.    If ProgettoAperto$=ProgettoAperto$(ProgettoAperto) Then Statement Return
  1643.   Next ProgettoAperto
  1644.   For ProgettoAperto=3 To 0 Step -1
  1645.    ProgettoAperto$(ProgettoAperto+1)=ProgettoAperto$(ProgettoAperto)
  1646.   Next ProgettoAperto
  1647.   ProgettoAperto$(0)=ProgettoAperto$
  1648.   StoriaDeiProgettiAperti=WriteFile(0,"ProjectsHistory")
  1649.   If StoriaDeiProgettiAperti=True
  1650.    FileOutput 0
  1651.    For ProgettoAperto=0 To 4
  1652.     If ProgettoAperto$(ProgettoAperto)<>""
  1653.      NPrint ProgettoAperto$(ProgettoAperto)
  1654.     EndIf
  1655.    Next ProgettoAperto
  1656.    CloseFile 0
  1657.    PopOutput
  1658.    VoceMenuEsci+1
  1659.   EndIf
  1660.  EndIf
  1661. End Statement
  1662.  
  1663. ;-----------------------------------------------------------
  1664. ;questa procedura imposta i suoni da usare con il programma
  1665. ;this procedure sets sounds to use with program
  1666. ;-----------------------------------------------
  1667. Statement EditoreSuoni{}
  1668. SHARED AltezzaFonte
  1669. SHARED AltezzaSchermo
  1670. SHARED LarghezzaSchermo
  1671. SHARED PercorsoSuoni$
  1672. SHARED Suono()
  1673. SHARED XLunSlider
  1674. SHARED YLunSlider
  1675.  
  1676. ;-----------------------------------------------------------------------
  1677. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  1678. ;sets text menu colour to the brightest available
  1679. ;-------------------------------------------------
  1680.  MenuColour 3
  1681.  
  1682.  MenuTitle #ListaMenuEditoreSuoni,0,"Sounds"
  1683.  MenuItem #ListaMenuEditoreSuoni,0,0,0,"Load"
  1684.  MenuItem #ListaMenuEditoreSuoni,0,0,1,"Discard"
  1685.  
  1686.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  1687.  TipoFinestra.l=#GadgetChiudiFinestra+#FinestraConMemoriaSfondo+#FinestraAttivata
  1688.  Window #FinestraEditoreSuoni,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"Sounds Editor",-1,-1
  1689.  LarghezzaInternaFinestraEditoreSuoni.w=InnerWidth
  1690.  AltezzaInternaFinestraEditoreSuoni.w=InnerHeight
  1691.  CloseWindow #FinestraEditoreSuoni
  1692.  
  1693. ;-------------------------------------------------------------------------------
  1694. ;imposta la barra di scorrimento che serve per visualizzare i suoni disponibili
  1695. ;sets the slider that is used to show the available sounds
  1696. ;_---------------------------------------------------------
  1697.  XLunSlider=16
  1698.  YLunSlider=AltezzaInternaFinestraEditoreSuoni
  1699.  ImpostaSlider{1,LarghezzaInternaFinestraEditoreSuoni-16,0,"VERTICAL",0,#ListaGadgetEditoreSuoni}
  1700.  
  1701.  Window #FinestraEditoreSuoni,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"Sounds Editor",-1,-1,#ListaGadgetEditoreSuoni
  1702.  
  1703. ;-------------------------------
  1704. ;attacca il menu' alla finestra
  1705. ;attaches menu to window
  1706. ;------------------------
  1707.  SetMenu #ListaMenuEditoreSuoni
  1708.  
  1709. ;----------------------------------------------
  1710. ;imposta la fonte di caratteri per la finestra
  1711. ;sets the font for the window
  1712. ;-----------------------------
  1713.  WindowFont #FonteDiCaratteriTopaz8
  1714.  
  1715.  WJam #DueColoriConSfondoPieno
  1716.  
  1717. ;----------------------------------
  1718. ;sounds window's displaying  start
  1719. ;----------------------------------
  1720.  InizioSuoni.b=0
  1721.  
  1722. ;------------------------
  1723. ;maximum strings length
  1724. ;------------------------
  1725.  LunghezzaMassimaStringhe.b=(LarghezzaInternaFinestraEditoreSuoni-16)/8
  1726.  
  1727. ;-----------------------------
  1728. ;stated by mouse sound number
  1729. ;-----------------------------
  1730.   SuonoIndicatoDalTopo.b=-1
  1731.  
  1732. ;-------------------------------------------------------------------------
  1733. ;imposta la barra di scorrimento della velocita' di esecuzione delle note
  1734. ;sets the notes execution velocity slider
  1735. ;-----------------------------------------
  1736.  MostraSlider{1,InizioSuoni,2,"VERTICAL",#ListaGadgetEditoreSuoni,#FinestraEditoreSuoni}
  1737.  
  1738.  Repeat
  1739.   If SecondoClicDelTopo.b=False
  1740.    WCls
  1741.    If SuoniCaricati.b>31 Then Enable #ListaGadgetEditoreSuoni,1 Else Disable #ListaGadgetEditoreSuoni,1
  1742.    Redraw #FinestraEditoreSuoni,1
  1743.    WLocate 0,0
  1744.  
  1745. ;----------------------
  1746. ;loaded sounds counter
  1747. ;----------------------
  1748.    SuoniCaricati=0
  1749.  
  1750.    For Suono.b=0 To 30
  1751.     AssegnamentoSuono$=Suono(InizioSuoni+Suono)\Nome
  1752.     If AssegnamentoSuono$<>""
  1753.      CanaleSuono.b=Suono(InizioSuoni+Suono)\Canale
  1754.      If CanaleSuono>0 Then WColour CanaleSuono-1,16-CanaleSuono Else WColour 1,0
  1755.      Format "00"
  1756.      If CanaleSuono>0 Then CanaleSuono$=" channel "+Str$(CanaleSuono) Else CanaleSuono$=" no channel"
  1757.      Format""
  1758.      AssegnamentoSuono$+CanaleSuono$
  1759.      AssegnamentoSuono$=Right$(AssegnamentoSuono$,LunghezzaMassimaStringhe)
  1760.      AssegnamentoSuono$+SPACE$(LunghezzaMassimaStringhe-Len(AssegnamentoSuono$))
  1761.      NPrint AssegnamentoSuono$
  1762.      SuoniCaricati+1
  1763.     EndIf
  1764.    Next Suono
  1765.    SecondoClicDelTopo=True
  1766.   EndIf
  1767.   EventoFinestraEditoreSuoni.l=WaitEvent
  1768.   Select EventoFinestraEditoreSuoni
  1769.   Case #HaiPremutoUnTastoDelTopo
  1770.    TastoCliccatoDelTopo.b=MButtons:YTopo=WMouseY
  1771.    Select TastoCliccatoDelTopo
  1772.    Case 1
  1773.     SuonoIndicatoDalTopo=YTopo/8+InizioSuoni
  1774.     If SuoniCaricati>0 AND SuonoIndicatoDalTopo<SuoniCaricati
  1775.      CanaleSuono.b=Suono(SuonoIndicatoDalTopo)\Canale
  1776.      CanaleSuono+1:If CanaleSuono=17 Then CanaleSuono=0
  1777.      Suono(SuonoIndicatoDalTopo)\Canale=CanaleSuono
  1778.     EndIf
  1779.     SecondoClicDelTopo=False
  1780.    Case 5
  1781.     SecondoClicDelTopo=True
  1782.    End Select
  1783. ;  Case #HaiPremutoUnGadget
  1784. ;   If SuoniCaricati>31
  1785. ;    AltezzaSlider.w=
  1786. ;    InizioSuoni=ValoreSlider{1,2,AltezzaInternaFinestraEditoreSuoni,"VERTICAL",#ListaGadgetEditoreSuoni}
  1787. ;   EndIf
  1788. ;   SecondoClicDelTopo=False
  1789.   Case #HaiRilasciatoUnGadget
  1790.    If SuoniCaricati>31
  1791.     InizioSuoni=ValoreSlider{1,2,AltezzaInternaFinestraEditoreSuoni,"VERTICAL",#ListaGadgetEditoreSuoni}
  1792.    EndIf
  1793.    SecondoClicDelTopo=False
  1794.   Case #HaiAttivatoIlMenu
  1795.    If MenuHit=0 AND ItemHit=0
  1796.     If SuoniCaricati<32
  1797.      MaxLen PercorsoSuoni$=160
  1798.      MaxLen NomeSuono$=64
  1799.      NomeSuono$=FileRequest$("Load a sound...",PercorsoSuoni$,NomeSuono$)
  1800.      If NomeSuono$<>""
  1801.       StessoSuono.b=False
  1802.       If SuoniCaricati>0
  1803.        For SuonoPrecedente=0 To SuoniCaricati-1
  1804.         If NomeSuono$=Suono(SuonoPrecedente)\Nome Then StessoSuono=True
  1805.        Next SuonoPrecedente
  1806.       EndIf
  1807.       If StessoSuono=False
  1808.        Suono=SuoniCaricati
  1809.        LoadSound Suono,NomeSuono$
  1810.        Suono(Suono)\Nome=NomeSuono$
  1811.        Sound Suono,3
  1812.       EndIf
  1813.      EndIf
  1814.     EndIf
  1815.    EndIf
  1816.    If MenuHit=0 AND ItemHit=1
  1817.     If SuoniCaricati>0 AND SuonoIndicatoDalTopo<SuoniCaricati AND SuonoIndicatoDalTopo>-1
  1818.      Suono=SuonoIndicatoDalTopo
  1819.      Free Sound Suono
  1820.      Suono(Suono)\Nome=""
  1821.      While Suono+1<SuoniCaricati
  1822.       Suono(Suono)\Nome=Suono(Suono+1)\Nome
  1823.       Suono(Suono)\Canale=Suono(Suono+1)\Canale
  1824.       Suono+1
  1825.      Wend
  1826.      Suono(Suono)\Nome=""
  1827.      Suono(Suono)\Canale=0
  1828.      SuonoIndicatoDalTopo=-1
  1829.     EndIf
  1830.    EndIf
  1831.    SecondoClicDelTopo=False
  1832.   Case #HaiChiusoLaFinestra
  1833.    SuoniAssegnatiAlloStessoCanale.b=False
  1834.    For SuonoUno.b=0 To 31
  1835.     For SuonoDue.b=0 To 31
  1836.      If SuonoUno<>SuonoDue
  1837.       If Suono(SuonoUno)\Canale>0 AND Suono(SuonoUno)\Canale=Suono(SuonoDue)\Canale
  1838.        SuoniAssegnatiAlloStessoCanale=True
  1839.       EndIf
  1840.      EndIf
  1841.     Next SuonoDue
  1842.    Next SuonoUno
  1843.    If SuoniAssegnatiAlloStessoCanale=True
  1844.     Messaggio$="You have two or more sounds|assigned to the same channel;|please adjust all better!"
  1845.     EZRequest "AmySequencer message",Messaggio$,"OK"
  1846.     SecondoClicDelTopo=False
  1847.    Else
  1848.     EsciDallEditoreSuoni.b=True
  1849.    EndIf
  1850.   Case #HaiPremutoUnTasto
  1851.    TastoPremuto$=LCase$(Inkey$)
  1852.    Select TastoPremuto$
  1853.    Case TastoEsc$
  1854.     EsciDallEditoreSuoni=True
  1855.    Case TastoCursoreSu$
  1856.    Case TastoCursoreGiu$
  1857.    End Select
  1858.    SecondoClicDelTopo=False
  1859.   End Select
  1860.  Until EsciDallEditoreSuoni=True
  1861.  CloseWindow #FinestraEditoreSuoni
  1862.  Use Window #FinestraPrincipale
  1863.  WJam #UnColoreConSfondoTrasparente
  1864. End Statement
  1865.  
  1866. ;-----------------------------------------------------
  1867. ;questa procedura cancella a video un evento musicale
  1868. ;this procedure clears on screen a musical event
  1869. ;------------------------------------------------
  1870. Statement CancellaUnEventoMusicale{TipoDiEvento$,Evento.b,InizioEvento.l,DurataEvento.l,ModoDisegno.b}
  1871. SHARED AltezzaInternaFinestraEditoreSequenza
  1872. SHARED AreaVisibileDeiValori
  1873. SHARED LarghezzaInternaFinestraEditoreSequenza
  1874. SHARED ScalaNote
  1875. SHARED TipoDiNota()
  1876. SHARED XInizioAreaVisibile
  1877. SHARED YInizioAreaVisibile
  1878.  Select TipoDiEvento$
  1879.  Case "Note"
  1880.   NotaVisualizzata.w=(127-Evento-YInizioAreaVisibile)*8
  1881.   If NotaVisualizzata>=0 AND NotaVisualizzata+7<=AltezzaInternaFinestraEditoreSequenza-8-8
  1882.    InizioNota.l=InizioEvento:FineNota.l=InizioNota+DurataEvento-1
  1883.    I.w=16+InizioNota/ScalaNote-XInizioAreaVisibile
  1884.    F.w=16+FineNota/ScalaNote-XInizioAreaVisibile
  1885.    If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  1886.     InizioNotaVisibile.b=True
  1887.    Else
  1888.     InizioNotaVisibile=False
  1889.    EndIf
  1890.    If F>=16 AND F<LarghezzaInternaFinestraEditoreSequenza
  1891.     FineNotaVisibile.b=True
  1892.    Else
  1893.     FineNotaVisibile=False
  1894.    EndIf
  1895.    If I<16 AND F>LarghezzaInternaFinestraEditoreSequenza
  1896.     NotaVisibile.b=True
  1897.    Else
  1898.     If InizioNotaVisibile=True OR FineNotaVisibile=True
  1899.      NotaVisibile=True
  1900.     Else
  1901.      NotaVisibile=False
  1902.     EndIf
  1903.    EndIf
  1904.    If NotaVisibile=True
  1905.     X0Nota=Min(Max(I,16),LarghezzaInternaFinestraEditoreSequenza-1)
  1906.     Y0Nota=Min(Max(NotaVisualizzata,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  1907.     X1Nota=Min(Max(F,16),LarghezzaInternaFinestraEditoreSequenza-1)
  1908.     Y1Nota=Min(Max(NotaVisualizzata+7,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  1909.     If TipoDiNota(Nota)\Diesis=True
  1910.      WBox X0Nota,Y0Nota,X1Nota,Y1Nota,0
  1911.     Else
  1912.      WBox X0Nota,Y0Nota,X1Nota,Y1Nota,3
  1913.     EndIf
  1914.    EndIf
  1915.   EndIf
  1916.  Case "Program"
  1917.   FineProgramma.l=InizioEvento+Len("Program000")*8-1
  1918.   If ModoDisegno=#EventoSelezionato Then FineProgramma+Len("X")*8
  1919.   I.w=16+InizioEvento/ScalaNote-XInizioAreaVisibile
  1920.   F.w=16+FineProgramma-XInizioAreaVisibile
  1921.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  1922.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  1923.    Programma.w=AreaVisibileDeiValori*Max((127-Evento+1),0)/127
  1924.    For Linea.b=0 To 7
  1925.     Y.w=Programma+Linea
  1926.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  1927.      Wline I,Y,FineProgramma,Y,0
  1928.     Else
  1929.      Wline I,Y,FineProgramma,Y,3
  1930.     EndIf
  1931.    Next Linea
  1932.   EndIf
  1933.  Case "Control"
  1934.   FineControllo.l=InizioEvento+Len("Control000")*8-1
  1935.   If ModoDisegno=#EventoSelezionato Then FineControllo+Len("X")*8
  1936.   I.w=16+InizioEvento/ScalaNote-XInizioAreaVisibile
  1937.   F.w=16+FineControllo-XInizioAreaVisibile
  1938.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  1939.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  1940.    Controllo.w=AreaVisibileDeiValori*Max((127-Evento+1),0)/127
  1941.    For Linea.b=0 To 7
  1942.     Y.w=Controllo+Linea
  1943.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  1944.      Wline I,Y,FineControllo,Y,0
  1945.     Else
  1946.      Wline I,Y,FineControllo,Y,3
  1947.     EndIf
  1948.    Next Linea
  1949.   EndIf
  1950.  Case "Tempo"
  1951.   FineTempo.l=InizioEvento+Len("Tempo=00/00")*8-1
  1952.   If ModoDisegno=#EventoSelezionato Then FineTempo+Len("X")*8
  1953.   I.w=16+InizioEvento/ScalaNote-XInizioAreaVisibile
  1954.   F.w=16+FineTempo-XInizioAreaVisibile
  1955.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  1956.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  1957.    Tempo.w=AreaVisibileDeiValori*Max((127-Evento+1),0)/127
  1958.    For Linea.b=0 To 7
  1959.     Y.w=Controllo+Linea
  1960.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  1961.      Wline I,Y,FineTempo,Y,0
  1962.     Else
  1963.      Wline I,Y,FineTempo,Y,3
  1964.     EndIf
  1965.    Next Linea
  1966.   EndIf
  1967.  End Select
  1968. End Statement
  1969.  
  1970. ;--------------------------------------------
  1971. ;questa procedura disegna un evento musicale
  1972. ;this procedure draws a musical events
  1973. ;--------------------------------------
  1974. Statement DisegnaUnEventoMusicale{TipoDiEvento$,Evento.b,InizioEvento.l,DurataEvento.l,CanaleEvento.b,ModoDisegno.b}
  1975. SHARED AltezzaInternaFinestraEditoreSequenza
  1976. SHARED AreaVisibileDeiValori
  1977. SHARED LarghezzaInternaFinestraEditoreSequenza
  1978. SHARED ScalaNote
  1979. SHARED XInizioAreaVisibile
  1980. SHARED YInizioAreaVisibile
  1981.  Select TipoDiEvento$
  1982.  Case "Note"
  1983.   NotaVisualizzata.w=(127-Evento-YInizioAreaVisibile)*8
  1984.   If NotaVisualizzata>=0 AND NotaVisualizzata+7<=AltezzaInternaFinestraEditoreSequenza-8-8
  1985.    FineNota.l=InizioEvento+DurataEvento-1
  1986.    I.w=16+InizioEvento/ScalaNote-XInizioAreaVisibile
  1987.    F.w=16+FineNota/ScalaNote-XInizioAreaVisibile
  1988.    If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  1989.     InizioNotaVisibile.b=True
  1990.    Else
  1991.     InizioNotaVisibile=False
  1992.    EndIf
  1993.    If F>=16 AND F<LarghezzaInternaFinestraEditoreSequenza
  1994.     FineNotaVisibile.b=True
  1995.    Else
  1996.     FineNotaVisibile=False
  1997.    EndIf
  1998.    If I<16 AND F>LarghezzaInternaFinestraEditoreSequenza
  1999.     NotaVisibile.b=True
  2000.    Else
  2001.     If InizioNotaVisibile=True OR FineNotaVisibile=True
  2002.      NotaVisibile=True
  2003.     Else
  2004.      NotaVisibile=False
  2005.     EndIf
  2006.    EndIf
  2007.    If NotaVisibile=True
  2008.     X0Nota=Min(Max(I,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2009.     Y0Nota=Min(Max(NotaVisualizzata,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2010.     X1Nota=Min(Max(F,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2011.     Y1Nota=Min(Max(NotaVisualizzata+7,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2012.     WBox X0Nota,Y0Nota,X1Nota,Y1Nota,16-CanaleEvento
  2013.     If ModoDisegno=#EventoSelezionato
  2014.      Wline X0Nota,NotaVisualizzata,X1Nota,NotaVisualizzata+7,CanaleEvento-1
  2015.      Wline X0Nota,NotaVisualizzata+7,X1Nota,NotaVisualizzata,CanaleEvento-1
  2016.     EndIf
  2017.     If ModoDisegno=#EventoNonSelezionato
  2018.      Wline X0Nota+1,NotaVisualizzata+1,X1Nota-1,NotaVisualizzata+1,CanaleEvento-1
  2019.      Wline X0Nota+1,NotaVisualizzata+6,X1Nota-1,NotaVisualizzata+6,CanaleEvento-1
  2020.     EndIf
  2021.     If ModoDisegno=#EventoNonSelezionato
  2022.      If InizioNotaVisibile=True
  2023.       Wline I+1,NotaVisualizzata+1,I+1,NotaVisualizzata+6,CanaleEvento-1
  2024.      EndIf
  2025.      If FineNotaVisibile=True
  2026.       Wline F-1,NotaVisualizzata+1,F-1,NotaVisualizzata+6,CanaleEvento-1
  2027.      EndIf
  2028.     EndIf
  2029.    EndIf
  2030.   EndIf
  2031.  Case "Program"
  2032.   FineProgramma.l=InizioEvento+Len("Program000")*8-1
  2033.   If ModoDisegno=#EventoSelezionato Then FineProgramma+Len("X")*8
  2034.   I.w=16+InizioEvento/ScalaNote-XInizioAreaVisibile
  2035.   F.w=16+FineProgramma-XInizioAreaVisibile
  2036.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2037.    WColour CanaleEvento-1,16-CanaleEvento
  2038.    Format "000":Programma$="Program"+Str$(Evento):Format ""
  2039.    If ModoDisegno=#EventoSelezionato Then Programma$+"X"
  2040.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2041.    Y.w=AreaVisibileDeiValori*Max((127-Evento+1),0)/127
  2042.    WLocate I,Y:Print Left$(Right$(Programma$,(F-16+1)/8),(F-I+1)/8)
  2043.   EndIf
  2044.  Case "Control"
  2045.   FineControllo.l=InizioEvento+Len("Control000")*8-1
  2046.   If ModoDisegno=#EventoSelezionato Then FineControllo+Len("X")*8
  2047.   I.w=16+InizioEvento/ScalaNote-XInizioAreaVisibile
  2048.   F.w=16+FineControllo-XInizioAreaVisibile
  2049.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2050.    WColour CanaleEvento-1,16-CanaleEvento
  2051.    Format "000":Controllo$="Control"+Str$(Evento):Format ""
  2052.    If ModoDisegno=#EventoSelezionato Then Controllo$+"X"
  2053.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2054.    Y.w=AreaVisibileDeiValori*Max((127-Evento+1),0)/127
  2055.    WLocate I,Y:Print Left$(Right$(Controllo$,(F-16+1)/8),(F-I+1)/8)
  2056.   EndIf
  2057.  Case "Tempo"
  2058.   FineTempo.l=InizioEvento+Len("Tempo=00/00")*8-1
  2059.   If ModoDisegno=#EventoSelezionato Then FineTempo+Len("X")*8
  2060.   I.w=16+InizioEvento/ScalaNote-XInizioAreaVisibile
  2061.   F.w=16+FineTempo-XInizioAreaVisibile
  2062.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2063.    WColour CanaleEvento-1,16-CanaleEvento:Format"00"
  2064.    Tempo$="Tempo="+Str$(Evento MOD 16+1)+"/"+Str$(Evento/16+1):Format ""
  2065.    If ModoDisegno=#EventoSelezionato Then Tempo$+"X"
  2066.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2067.    Y.w=AreaVisibileDeiValori*Max((127-Evento+1),0)/127
  2068.    WLocate I,Y:Print Left$(Right$(Tempo$,(F-16+1)/8),(F-I+1)/8)
  2069.   EndIf
  2070.  End Select
  2071. End Statement
  2072.  
  2073. ;-----------------------------------------------------------
  2074. ;questa procedura disegna le note di sfondo con i loro nomi
  2075. ;this procedure draws the notes background with note names
  2076. ;----------------------------------------------------------
  2077. Statement MostraLeNoteDiSfondoConILoroNomi{}
  2078. SHARED AreaInvisibileDelleNote
  2079. SHARED LarghezzaInternaFinestraEditoreSequenza
  2080. SHARED TipoDiNota()
  2081. SHARED YInizioAreaVisibile
  2082.  For Tasto.b=0 To 127-AreaInvisibileDelleNote
  2083.   Nota.b=127-Tasto-YInizioAreaVisibile
  2084.   Y0Nota.w=Tasto*8:Y1Nota.w=Y0Nota+7
  2085.   If TipoDiNota(Nota)\Diesis=True
  2086.    WBox 16,Y0Nota,LarghezzaInternaFinestraEditoreSequenza,Y1Nota,0
  2087.    WColour 3,0
  2088.   Else
  2089.    WBox 16,Y0Nota,LarghezzaInternaFinestraEditoreSequenza,Y1Nota,3
  2090.    WColour 0,3
  2091.   EndIf
  2092.   WLocate 16,Y0Nota
  2093.   Print "Note ",Nota,">"
  2094.   Print TipoDiNota(Nota)\NomeInglese
  2095.   Print "-"
  2096.   Print TipoDiNota(Nota)\NomeItaliano
  2097.   Print TipoDiNota(Nota)\Ottava
  2098.  Next Tasto
  2099. End Statement
  2100.  
  2101. ;-----------------------------------------------
  2102. ;questa procedura mostra i numeri delle battute
  2103. ;this procedure shows the bar numbers
  2104. ;-------------------------------------
  2105. Statement MostraLeBattute{}
  2106. SHARED AreaInvisibileDelleNote
  2107. SHARED Battiti
  2108. SHARED EventoMusicale()
  2109. SHARED LarghezzaInternaFinestraEditoreSequenza
  2110. SHARED Misure
  2111. SHARED ScalaNote
  2112. SHARED SequenzaSelezionata
  2113. SHARED TipoDiNota()
  2114. SHARED XInizioAreaVisibile
  2115. SHARED YInizioAreaVisibile
  2116.  Nota.b=127-YInizioAreaVisibile-(127-AreaInvisibileDelleNote)
  2117.  Nota$=Str$(Nota):OttavaNota$=Str$(TipoDiNota(Nota)\Ottava):NomeIngleseNota$=TipoDiNota(Nota)\NomeInglese
  2118.  NomeItalianoNota$=TipoDiNota(Nota)\NomeItaliano
  2119.  LarghezzaTesto.w=Len("Note "+Nota$+">"+NomeIngleseNota$+"-"+NomeItalianoNota$+OttavaNota$+" ")*8
  2120.  If TipoDiNota(Nota)\Diesis=True Then WColour 3,0 Else WColour 0,3
  2121.  ScostamentoBattute.w=XInizioAreaVisibile MOD 192
  2122.  FineTempoVisibile.l=XInizioAreaVisibile+(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaNote
  2123.  TempoVisibile.l=XInizioAreaVisibile
  2124.  ResetList EventoMusicale()
  2125.  Repeat
  2126.   XTempo.w=(TempoVisibile-XInizioAreaVisibile-ScostamentoBattute)/ScalaNote
  2127.   If XTempo>LarghezzaTesto
  2128.    While NextItem(EventoMusicale())=True
  2129.     If EventoMusicale()\Tipo="Tempo"
  2130.      If EventoMusicale()\Sequenza=SequenzaSelezionata AND EventoMusicale()\Inizio<=TempoVisibile
  2131.       NuoviBattiti.b=EventoMusicale()\Evento MOD 16+1
  2132.       NuoveMisure.b=EventoMusicale()\Evento/16+1
  2133.       TempoCambiato.b=True
  2134.      EndIf
  2135.     EndIf
  2136.    Wend
  2137.    WLocate XTempo,(127-AreaInvisibileDelleNote)*8
  2138.    If TempoCambiato=True
  2139.     ConvertiIlTempoInBattute{TempoVisibile-ScostamentoBattute,NuoviBattiti,NuoveMisure,False}
  2140.    Else
  2141.     ConvertiIlTempoInBattute{TempoVisibile-ScostamentoBattute,Battiti,Misure,False}
  2142.    EndIf
  2143.   EndIf
  2144.   If TempoCambiato=True
  2145.    IncrementoTempoVisibile.w=(192*(4.0/NuoveMisure))*Max(ScalaNote/4,1)
  2146.   Else
  2147.    IncrementoTempoVisibile.w=(192*(4.0/Misure))*Max(ScalaNote/4,1)
  2148.   EndIf
  2149.   TempoVisibile+IncrementoTempoVisibile
  2150.  Until TempoVisibile>FineTempoVisibile
  2151. End Statement
  2152.  
  2153. ;-----------------------------------------------------
  2154. ;questa procedura mostra gli slider dell'editore note
  2155. ;this procedure shows the notes editor' sliders
  2156. ;-----------------------------------------------
  2157. Statement MostraSliderEditoreSequenza{}
  2158. SHARED AreaInvisibileDelleNote
  2159. SHARED AreaInvisibileDelTempo
  2160. SHARED DurataSequenza
  2161. SHARED LarghezzaInternaFinestraEditoreSequenza
  2162. SHARED ScalaNote
  2163. SHARED Sequenza()
  2164. SHARED SequenzaSelezionata
  2165. SHARED XInizioAreaVisibile
  2166. SHARED YInizioAreaVisibile
  2167.  MostraSlider{1,YInizioAreaVisibile,AreaInvisibileDelleNote,"VERTICAL",#ListaGadgetEditoreSequenza,#FinestraEditoreSequenza}
  2168.  AreaInvisibileDelTempo=DurataSequenza/ScalaNote-(LarghezzaInternaFinestraEditoreSequenza-16)
  2169.  AreaInvisibileDelTempo=Max(AreaInvisibileDelTempo,0)
  2170.  If AreaInvisibileDelTempo=0
  2171.   Disable #ListaGadgetEditoreSequenza,2
  2172.   XInizioAreaVisibile=0
  2173.  Else
  2174.   Enable #ListaGadgetEditoreSequenza,2
  2175.  EndIf
  2176.  Redraw #FinestraEditoreSequenza,2
  2177.  MostraSlider{2,XInizioAreaVisibile,AreaInvisibileDelTempo,"HORIZONTAL",#ListaGadgetEditoreSequenza,#FinestraEditoreSequenza}
  2178. End Statement
  2179.  
  2180. ;--------------------------------------------
  2181. ;questa procedura mostra gli eventi musicali
  2182. ;this procedure shows musical events
  2183. ;------------------------------------
  2184. Statement MostraGliEventiMusicali{}
  2185. SHARED EventoMusicale()
  2186. SHARED SequenzaSelezionata
  2187.  ResetList EventoMusicale()
  2188.  While NextItem(EventoMusicale())=True
  2189.   TipoDiEvento$=EventoMusicale()\Tipo
  2190.   If EventoMusicale()\Sequenza=SequenzaSelezionata
  2191.    InizioEvento.l=EventoMusicale()\Inizio
  2192.    CanaleEvento.b=EventoMusicale()\Canale
  2193.    If EventoMusicale()\Selezionato=True
  2194.     Select TipoDiEvento$
  2195.     Case "Note"
  2196.      Nota.b=EventoMusicale()\Evento:DurataNota.l=EventoMusicale()\Durata
  2197.      DisegnaUnEventoMusicale{"Note",Nota,InizioEvento,DurataNota,CanaleEvento,#EventoSelezionato}
  2198.     Case "Program"
  2199.      Programma.b=EventoMusicale()\Evento
  2200.      DisegnaUnEventoMusicale{"Program",Programma,InizioEvento,0,CanaleEvento,#EventoSelezionato}
  2201.     Case "Control"
  2202.      Controllo.b=EventoMusicale()\Evento
  2203.      DisegnaUnEventoMusicale{"Control",Controllo,InizioEvento,0,CanaleEvento,#EventoSelezionato}
  2204.     Case "Tempo"
  2205.      Tempo.b=EventoMusicale()\Evento
  2206.      DisegnaUnEventoMusicale{"Tempo",Tempo,InizioEvento,0,CanaleEvento,#EventoSelezionato}
  2207.     End Select
  2208.    Else
  2209.     Select TipoDiEvento$
  2210.     Case "Note"
  2211.      Nota=EventoMusicale()\Evento:DurataNota=EventoMusicale()\Durata
  2212.      DisegnaUnEventoMusicale{"Note",Nota,InizioEvento,DurataNota,CanaleEvento,#EventoNonSelezionato}
  2213.     Case "Program"
  2214.      Programma=EventoMusicale()\Evento
  2215.      DisegnaUnEventoMusicale{"Program",Programma,InizioEvento,0,CanaleEvento,#EventoNonSelezionato}
  2216.     Case "Control"
  2217.      Controllo=EventoMusicale()\Evento
  2218.      DisegnaUnEventoMusicale{"Control",Controllo,InizioEvento,0,CanaleEvento,#EventoNonSelezionato}
  2219.     Case "Tempo"
  2220.      Tempo=EventoMusicale()\Evento
  2221.      DisegnaUnEventoMusicale{"Tempo",Tempo,InizioEvento,0,CanaleEvento,#EventoNonSelezionato}
  2222.     End Select
  2223.    EndIf
  2224.   EndIf
  2225.  Wend
  2226. End Statement
  2227.  
  2228. ;---------------------------------------------------------------
  2229. ;questa procedura mostra la scala di visualizzazione delle note
  2230. ;this procedure shows the note scale of notes displaying
  2231. ;--------------------------------------------------------
  2232. Statement MostraLaScalaDelleNote{}
  2233. SHARED AltezzaInternaFinestraEditoreSequenza
  2234. SHARED ColoriOriginali
  2235. SHARED ScalaNote
  2236. ; For Scatola.b=0 To 4
  2237. ;  Y0Scatola.w=AltezzaInternaFinestraEditoreSequenza-8-8
  2238. ;  WBox Scatola,Y0Scatola+Scatola,15-Scatola,Y0Scatola+7-Scatola,15-Scatola
  2239. ; Next Scatola
  2240.  Select ScalaNote
  2241.  Case 1
  2242.   Ingrandimento.b=1
  2243.  Case 2
  2244.   Ingrandimento=2
  2245.  Case 4
  2246.   Ingrandimento=3
  2247.  Case 8
  2248.   Ingrandimento=4
  2249.  Case 16
  2250.   Ingrandimento=5
  2251.  Case 32
  2252.   Ingrandimento=6
  2253.  End Select
  2254.  WLocate 0,AltezzaInternaFinestraEditoreSequenza-8-8
  2255.  If ColoriOriginali=True Then WColour 1,0 Else WColour 2,1
  2256.  Print "Z",Ingrandimento
  2257. End Statement
  2258.  
  2259. Statement MostraITastiDaUsare{}
  2260.  MostraITastiDaUsare$="Space>.......move sequence end forward|"
  2261.  MostraITastiDaUsare$+"No selected events:|"
  2262.  MostraITastiDaUsare$+"Cursor up>...scroll window up|"
  2263.  MostraITastiDaUsare$+"Cursor down>.scroll window down|"
  2264.  MostraITastiDaUsare$+"Cursor left>.scroll window forward|"
  2265.  MostraITastiDaUsare$+"Cursor right>scroll window backward|"
  2266.  MostraITastiDaUsare$+"Backspace>...delete last event|"
  2267.  MostraITastiDaUsare$+"with selected events:|"
  2268.  MostraITastiDaUsare$+"Cursor up>...inc sel events/tempo beat|"
  2269.  MostraITastiDaUsare$+"Cursor down>.dec sel events/tempo beat|"
  2270.  MostraITastiDaUsare$+"Cursor left>.move sel events forward|"
  2271.  MostraITastiDaUsare$+"Cursor right>move sel events backward|"
  2272.  MostraITastiDaUsare$+"with selected events plus shift:|"
  2273.  MostraITastiDaUsare$+"Cursor up>...move sel notes up of one octave|"
  2274.  MostraITastiDaUsare$+"             inc sel events of 10|"
  2275.  MostraITastiDaUsare$+"             inc sel tempo events measure|"
  2276.  MostraITastiDaUsare$+"Cursor down> move sel notes down of one octave|"
  2277.  MostraITastiDaUsare$+"             dec sel events of 10|"
  2278.  MostraITastiDaUsare$+"             dec sel tempo events measure|"
  2279.  MostraITastiDaUsare$+"Cursor left>.stretch sel notes forward|"
  2280.  MostraITastiDaUsare$+"Cursor right>stretch sel notes backward|"
  2281.  MostraITastiDaUsare$+"Backspace>...delete all sel events|"
  2282.  MostraITastiDaUsare$+"Esc>.........leave the editor"
  2283.  EZRequest "AmySequencer help",MostraITastiDaUsare$,"OK"
  2284. End Statement
  2285.  
  2286. Statement MostraLaMappaturaDelleNoteSullaTastiera{}
  2287.  MostraLaMappaturaDelleNoteSullaTastiera$="Note    lo octave hi octave|"
  2288.  MostraLaMappaturaDelleNoteSullaTastiera$+"C--Do  >........Z.........Q|"
  2289.  MostraLaMappaturaDelleNoteSullaTastiera$+"C#-Do# >........S.........2|"
  2290.  MostraLaMappaturaDelleNoteSullaTastiera$+"D--Re  >........X.........W|"
  2291.  MostraLaMappaturaDelleNoteSullaTastiera$+"D#-Re# >........D.........3|"
  2292.  MostraLaMappaturaDelleNoteSullaTastiera$+"E--Mi  >........C.........E|"
  2293.  MostraLaMappaturaDelleNoteSullaTastiera$+"F--Fa  >........V.........R|"
  2294.  MostraLaMappaturaDelleNoteSullaTastiera$+"F#-Fa# >........G.........5|"
  2295.  MostraLaMappaturaDelleNoteSullaTastiera$+"G--Sol >........B.........T|"
  2296.  MostraLaMappaturaDelleNoteSullaTastiera$+"G#-Sol#>........H.........6|"
  2297.  MostraLaMappaturaDelleNoteSullaTastiera$+"A--La  >........N.........Y|"
  2298.  MostraLaMappaturaDelleNoteSullaTastiera$+"A#-La# >........J.........7|"
  2299.  MostraLaMappaturaDelleNoteSullaTastiera$+"B--Si  >........M.........U|"
  2300.  MostraLaMappaturaDelleNoteSullaTastiera$+"|"
  2301.  MostraLaMappaturaDelleNoteSullaTastiera$+"function keys to select octave"
  2302.  EZRequest "AmySequencer help",MostraLaMappaturaDelleNoteSullaTastiera$,"OK"
  2303. End Statement
  2304.  
  2305. ;---------------------------------------------------
  2306. ;questa procedura permette di cambiare la nota base
  2307. ;this procedure permits to change the basic note
  2308. ;------------------------------------------------
  2309. Statement CambiaLEventoDiBase{}
  2310. SHARED AltezzaFonte
  2311. SHARED ColoriOriginali
  2312. SHARED EventiSelezionati
  2313. SHARED EventoMusicale()
  2314. SHARED LarghezzaEventoDiBase
  2315. SHARED TastoCursoreDestra$
  2316. SHARED TastoCursoreSinistra$
  2317. SHARED TastoEsc$
  2318. SHARED TipoDiEvento$
  2319. SHARED ValoreEventoDiBase
  2320. SHARED XLunSlider
  2321. SHARED YLunSlider
  2322.  TipoFinestra.l=#FinestraMovibile+#GadgetNascondiFinestra+#GadgetChiudiFinestra+#FinestraConMemoriaSfondo+#FinestraAttivata
  2323.  YPosF.w=(AltezzaFonte+3)*2
  2324.  YLunF.w=AltezzaFonte+3+16+8+8+2:If TipoDiEvento$<>"Program" AND TipoDiEvento$<>"Tempo" Then YLunF+8+8
  2325.  TitoloFinestra$="Basic event: "+LCase$(TipoDiEvento$)
  2326.  Window #FinestraCambioEventoBase,4,YPosF,4+24*9+4,YLunF,TipoFinestra,TitoloFinestra$,-1,-1
  2327.  LarghezzaInternaFinestraCambioEventoBase.w=InnerWidth
  2328.  AltezzaInternaFinestraCambioEventoBase.w=InnerHeight
  2329.  CloseWindow #FinestraCambioEventoBase
  2330.  XLunSlider=LarghezzaInternaFinestraCambioEventoBase
  2331.  YLunSlider=8
  2332.  If TipoDiEvento$<>"Program" AND TipoDiEvento$<>"Tempo"
  2333.   ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8-8-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  2334.   ImpostaSlider{2,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  2335.  Else
  2336.   ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  2337.  EndIf
  2338.  Window #FinestraCambioEventoBase,4,YPosF,4+24*9+4,YLunF,TipoFinestra,TitoloFinestra$,-1,-1,#ListaGadgetCambioEventoBase
  2339.  WindowFont #FonteDiCaratteriTopaz8
  2340. ; Zona.b=NewZoneTable(#TabellaZoneCambioEventoBase,9)
  2341. ; If Zona=True Then UseZoneTable #TabellaZoneCambioEventoBase Else Statement Return
  2342. ; UseZoneTable #TabellaZoneEditoreSequenza
  2343.  For Zona.b=0 To 7
  2344.   WBlit Zona,24*Zona,0;:SetZone Zona,24*Zona,0,24*Zona+23,15
  2345.  Next
  2346.  WLocate 24*8+8,4:WColour 1,0:Print "3";:SetZone 8,24*8,0,24*8+23,15
  2347.  MostraSlider{1,(LarghezzaEventoDiBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  2348.  If TipoDiEvento$<>"Program" AND TipoDiEvento$<>"Tempo"
  2349.   MostraSlider{2,ValoreEventoDiBase,127,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  2350.  EndIf
  2351.  NuovaLarghezzaEventoDiBase.w=LarghezzaEventoDiBase
  2352.  NuovoValoreEventoDiBase.b=ValoreEventoDiBase
  2353.  EventoBaseDiModificato.b=False
  2354.  Repeat
  2355.   ResetTimer
  2356.   If SecondoClicDelTopo.b=False
  2357.    If TipoDiEvento$="Program" OR TipoDiEvento$="Tempo"
  2358.     WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8
  2359.    Else
  2360.     WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8-8-8
  2361.    EndIf
  2362.    If NuovaLarghezzaEventoDiBase MOD 6=0
  2363.     If ColoriOriginali=True Then WColour 3,2 Else WColour 10,9
  2364.    Else
  2365.     WColour 2,1
  2366.    EndIf
  2367.    Format "0000":Print NuovaLarghezzaEventoDiBase:Format "":Print SPACE$(18)+"width"
  2368.    If TipoDiEvento$<>"Program" AND TipoDiEvento$<>"Tempo"
  2369.     WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8
  2370.     WColour 1,0:Format "000":Print NuovoValoreEventoDiBase:Format ""
  2371.     If TipoDiEvento$="Note" Then Valore$="velocity"
  2372.     If TipoDiEvento$="Control" Then Valore$="value"
  2373.     Print SPACE$(24-Len(Valore$)),Valore$
  2374.    EndIf
  2375.    SecondoClicDelTopo=True
  2376.   EndIf
  2377.   EventoFinestraCambioEventoBase.l=WaitEvent
  2378.   TempoTrascorso.l=Timer
  2379.   Select EventoFinestraCambioEventoBase
  2380.   Case #HaiPremutoUnTastoDelTopo
  2381.    XTopo.w=WMouseX:YTopo.w=WMouseY:TastoCliccatoDelTopo.b=MButtons
  2382.    Select TastoCliccatoDelTopo
  2383.    Case 1
  2384.     XZonaTopo.b=XTopo/24:YZonaTopo.b=YTopo>=0 AND YTopo<16
  2385.     If YZonaTopo=True
  2386.      Select XZonaTopo
  2387.      Case 0
  2388.       NuovaLarghezzaEventoDiBase=192*4:NotaPuntata.w=0:Terzina.b=0
  2389.       Speak "You have choosen a whole note width"
  2390.      Case 1
  2391.       NuovaLarghezzaEventoDiBase=192*2:NotaPuntata=0:Terzina=0
  2392.       Speak "You have choosen a half note width"
  2393.      Case 2
  2394.       NuovaLarghezzaEventoDiBase=192:NotaPuntata=0:Terzina=0
  2395.       Speak "You have choosen a quarter note width"
  2396.      Case 3
  2397.       NuovaLarghezzaEventoDiBase=192/2:NotaPuntata=0:Terzina=0
  2398.       Speak "You have choosen an eighth note width"
  2399.      Case 4
  2400.       NuovaLarghezzaEventoDiBase=192/4:NotaPuntata=0:Terzina=0
  2401.       Speak "You have choosen a sixteenth note width"
  2402.      Case 5
  2403.       NuovaLarghezzaEventoDiBase=192/8:NotaPuntata=0:Terzina=0
  2404.       Speak "You have choosen a thirty second note width"
  2405.      Case 6
  2406.       NuovaLarghezzaEventoDiBase=192/16:NotaPuntata=0:Terzina=0
  2407.       Speak "You have choosen a sixty fourth note width"
  2408.      Case 7
  2409.       If NotaPuntata=0
  2410.        NotaPuntata=NuovaLarghezzaEventoDiBase/2
  2411.        NuovaLarghezzaEventoDiBase+NotaPuntata
  2412.        If Terzina>0
  2413.         Terzina=0
  2414.         Speak "You have no more a triplet note width, you have choosen a dotted note width"
  2415.        Else
  2416.         Speak "You have choosen a dotted note width"
  2417.        EndIf
  2418.       Else
  2419.        NuovaLarghezzaEventoDiBase/3*2
  2420.        NotaPuntata=0
  2421.        Speak "You have no more a dotted note width"
  2422.       EndIf
  2423.      Case 8
  2424.       If Terzina=0 AND NuovaLarghezzaEventoDiBase>5
  2425.        Terzina=3:NuovaLarghezzaEventoDiBase/Terzina
  2426.        If NotaPuntata>0
  2427.         NotaPuntata=0
  2428.         Speak "You have no more a dotted note width, you have choosen a triplet note width"
  2429.        Else
  2430.         Speak "You have choosen a triplet note width"
  2431.        EndIf
  2432.       Else
  2433.        NuovaLarghezzaEventoDiBase*Terzina:Terzina=0
  2434.        Speak "You have no more a triplet note width"
  2435.       EndIf
  2436.      End Select
  2437.      If XZonaTopo>=0 AND XZonaTopo<9
  2438. MostraSlider{1,(NuovaLarghezzaEventoDiBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  2439.       Speak ", that are "+Str$(NuovaLarghezzaEventoDiBase)+" ticks."
  2440.      EndIf
  2441.     EndIf
  2442.     SecondoClicDelTopo=False
  2443.    Case 5
  2444.     SecondoClicDelTopo=True
  2445.    End Select
  2446. ;  Case #HaiPremutoUnGadget
  2447. ;   XLunSlider=LarghezzaInternaFinestraCambioEventoBase
  2448. ;   NuovaLarghezzaEventoDiBase=ValoreSlider{1,(192*6-2)/2,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}*2+2
  2449.   Case #HaiRilasciatoUnGadget
  2450.    Select GadgetHit
  2451.    Case 1
  2452.     XLunSlider=LarghezzaInternaFinestraCambioEventoBase
  2453.     NuovaLarghezzaEventoDiBase=ValoreSlider{1,(192*6-2)/2,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}*2+2
  2454.     NotaPuntata=0:Terzina=0
  2455.     Speak "You have choosen a note width of "+Str$(NuovaLarghezzaEventoDiBase)+" ticks."
  2456.    Case 2
  2457.     XLunSlider=LarghezzaInternaFinestraCambioEventoBase
  2458.     NuovoValoreEventoDiBase=ValoreSlider{2,127,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  2459.     Speak "You have choosen a note velocity of "+Str$(NuovoValoreEventoDiBase)+"."
  2460.    End Select
  2461.    SecondoClicDelTopo=False
  2462.   Case #HaiChiusoLaFinestra
  2463.    EsciDalCambioEventoBase=True
  2464.   Case #HaiPremutoUnTasto
  2465.    TastoPremuto$=LCase$(Inkey$)
  2466.    Select TastoPremuto$
  2467.    Case TastoEsc$
  2468.     EsciDalCambioEventoBase=True
  2469.    Case TastoCursoreDestra$
  2470.     If NuovaLarghezzaEventoDiBase<192*6-2
  2471.      NuovaLarghezzaEventoDiBase+2:NotaPuntata=0:Terzina=0
  2472. MostraSlider{1,(NuovaLarghezzaEventoDiBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  2473.      If TempoTrascorso>99 Then Speak "You have choosen a note width of "+Str$(NuovaLarghezzaEventoDiBase)+" ticks."
  2474.     EndIf
  2475.    Case TastoCursoreSinistra$
  2476.     If NuovaLarghezzaEventoDiBase>3
  2477.      NuovaLarghezzaEventoDiBase-2:NotaPuntata=0:Terzina=0
  2478. MostraSlider{1,(NuovaLarghezzaEventoDiBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  2479.      If TempoTrascorso>99 Then Speak "You have choosen a note width of "+Str$(NuovaLarghezzaEventoDiBase)+" ticks."
  2480.     EndIf
  2481.    End Select
  2482.    SecondoClicDelTopo=False
  2483.   End Select
  2484.  Until EsciDalCambioEventoBase=True
  2485.  
  2486.  If NuovaLarghezzaEventoDiBase<>LarghezzaEventoDiBase Then EventoDiBaseModificato=True
  2487.  If NuovoValoreEventoDiBase<>ValoreEventoDiBase Then EventoDiBaseModificato=True
  2488.  LarghezzaEventoDiBase=NuovaLarghezzaEventoDiBase:ValoreEventoDiBase=NuovoValoreEventoDiBase
  2489.  
  2490.  If EventoDiBaseModificato=True AND EventiSelezionati>0
  2491.   Messaggio$="You have made changes:|"
  2492.   Messaggio$="Would you apply these to the selected events?"
  2493.   ApplicaINuoviValoriAgliEventiSelezionati.b=EZRequest("AmySequencer message",Messaggio$,"Yes|No")
  2494.   If ApplicaINuoviValoriAgliEventiSelezionati=1
  2495.    Select TipoDiEvento$
  2496.    Case "Note"
  2497.     AggiustaInizio.b=EZRequest("AmySequencer message","Quantize notes start?","Yes|No")
  2498.     AggiustaDurata.b=EZRequest("AmySequencer message","Quantize notes length?","Yes|No")
  2499.     AggiustaValore.b=EZRequest("AmySequencer message","Change notes velocity?","Yes|No")
  2500.    Case "Program"
  2501.     AggiustaInizio.b=EZRequest("AmySequencer message","Quantize programs start?","Yes|No")
  2502.    Case "Control"
  2503.     AggiustaInizio.b=EZRequest("AmySequencer message","Quantize controls start?","Yes|No")
  2504.     AggiustaValore.b=EZRequest("AmySequencer message","Change controls value?","Yes|No")
  2505.    Case "Tempo"
  2506.     AggiustaInizio.b=EZRequest("AmySequencer message","Quantize tempo events start?","Yes|No")
  2507.    End Select
  2508.    ResetList EventoMusicale()
  2509.    While NextItem(EventoMusicale())=True
  2510.     If EventoMusicale()\Selezionato=True
  2511.      Select EventoMusicale()\Tipo
  2512.      Case "Note"
  2513.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoDiBase*LarghezzaEventoDiBase
  2514.       If AggiustaDurata=1 Then EventoMusicale()\Durata=LarghezzaEventoDiBase
  2515.       If AggiustaValore=1 Then EventoMusicale()\Valore=ValoreEventoDiBase
  2516.      Case "Program"
  2517.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoDiBase
  2518.      Case "Control"
  2519.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoDiBase
  2520.       If AggiustaValore=1 Then EventoMusicale()\Valore=ValoreEventoDiBase
  2521.      Case "Tempo"
  2522.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoDiBase
  2523.      End Select
  2524.     EndIf
  2525.    Wend
  2526.   EndIf
  2527.  EndIf
  2528.  
  2529. ;*************************************************************
  2530. ;la seguente linea se attivata da' errore quando non dovrebbe
  2531. ;the following line if avtivated gives an error when it should not do
  2532. ;*********************************************************************
  2533. ; FreeZoneTable(#TabellaZoneCambioEventoBase)
  2534.  
  2535.  CloseWindow #FinestraCambioEventoBase
  2536.  Use Window #FinestraEditoreSequenza
  2537.  
  2538. ;***************************************************
  2539. ;il seguente comando sembra non avere alcun effetto
  2540. ;the following command seems have no effect
  2541. ;*******************************************
  2542. ; UseZoneTable #TabellaZoneEditoreSequenza
  2543.  
  2544. End Statement
  2545.  
  2546. ;---------------------------------------------------------------
  2547. ;this procedure states the selected by mouse event new position
  2548. ;questa procedura mostra la nuova posizione dell'evento selezionato col mouse
  2549. ;-----------------------------------------------------------------------------
  2550. Statement MostraNuovaPosizioneEvento{XEvento.l,YEvento.b}
  2551. SHARED AltezzaInternaFinestraEditoreSequenza
  2552. SHARED AreaVisibileDeiValori
  2553. SHARED LarghezzaEventoDiBase
  2554. SHARED LarghezzaInternaFinestraEditoreSequenza
  2555. SHARED MostraNuovoValore
  2556. SHARED ScalaNote
  2557. SHARED TipoDiEvento$
  2558. SHARED XInizioAreaVisibile
  2559. SHARED YInizioAreaVisibile
  2560.  X0.w=16+XEvento/ScalaNote-XInizioAreaVisibile
  2561.  Select TipoDiEvento$
  2562.  Case "Note"
  2563.   Y0.w=(127-YInizioAreaVisibile-YEvento)*8
  2564.   X1.w=X0+(LarghezzaEventoDiBase-1)/ScalaNote
  2565.  Case "Program"
  2566.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  2567.   X1=X0+Len("Program000X")*8-1
  2568.  Case "Control"
  2569.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  2570.   X1=X0+Len("Control000X")*8-1
  2571.  Case "Tempo"
  2572.   Y0=AreaVisibileDeiValori*Max((127-YEvento+1),0)/127
  2573.   X1=X0+Len("Tempo=00/00X")*8-1
  2574.  End Select
  2575.  Y1.w=Y0+7
  2576.  X0=Min(Max(X0,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2577.  Y0=Min(Max(Y0,0),AltezzaInternaFinestraEditoreSequenza-1-8-8-7)
  2578.  X1=Min(Max(X1,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2579.  Y1=Min(Max(Y1,7),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2580.  WJam #SecondaVoltaStessoColore
  2581.  If MostraNuovoValore=True
  2582.   WLocate X0,Y0
  2583.   Select TipoDiEvento$
  2584.   Case "Note"
  2585.    Wline X0,Y0,X1,Y0,X1,Y1,X0,Y1,X0,Y0,0
  2586.   Case "Program"
  2587.    Format "000":Print "Program",Str$(YEvento),"X":Format ""
  2588.   Case "Control"
  2589.    Format "000":Print "Control",Str$(YEvento),"X":Format ""
  2590.   Case "Tempo"
  2591.    Format "00":Print "Tempo=",Str$(YEvento MOD 16+1),"/",Str$(YEvento/16+1):Format ""
  2592.   End Select
  2593.  Else
  2594.   Wline X0,Y0,X1,Y0,X1,Y1,X0,Y1,X0,Y0,0
  2595.  EndIf
  2596.  WJam #DueColoriConSfondoPieno
  2597. End Statement
  2598.  
  2599. ;---------------------------------------------------------------------------
  2600. ;questa procedura permette di spostare le nota selezionate cliccando con il
  2601. ; mouse su una di esse
  2602. ;this procedure permits to move the selected notes clicking on one of these
  2603. ;---------------------------------------------------------------------------
  2604. Statement MuoviGliEventiSelezionatiConIlTopo{XPosizioneEvento.l,YPosizioneEvento.b}
  2605. SHARED AltezzaInternaFinestraEditoreSequenza
  2606. SHARED AreaVisibileDeiValori
  2607. SHARED Battiti
  2608. SHARED CanaleSelezionato
  2609. SHARED DurataSequenza
  2610. SHARED EventoMusicale()
  2611. SHARED EventoMusicaleSpostatoConIlTopo
  2612. SHARED LarghezzaEventoDiBase
  2613. SHARED Misure
  2614. SHARED MostraNuovoValore
  2615. SHARED ScalaNote
  2616. SHARED SequenzaSelezionata
  2617. SHARED XInizioAreaVisibile
  2618. SHARED XPosizioneNota
  2619. SHARED YInizioAreaVisibile
  2620. SHARED YPosizioneNota
  2621.  PrimoSpostamento.b=True
  2622.  Repeat
  2623.   NuovaXTopo.w=WMouseX:NuovaYTopo.w=WMouseY
  2624.   TastoPremutoDelTopo=Joyb(0)
  2625.   TipoDiEvento$=EventoMusicale()\Tipo
  2626.   InizioEvento.l=EventoMusicale()\Inizio
  2627.   CanaleEvento.b=EventoMusicale()\Canale
  2628.   Select TipoDiEvento$
  2629.   Case "Note"
  2630.    XNuovaPosizioneNota.l=((XInizioAreaVisibile+NuovaXTopo-16)*ScalaNote)/LarghezzaEventoDiBase*LarghezzaEventoDiBase
  2631.    YNuovaPosizioneNota.b=127-YInizioAreaVisibile-NuovaYTopo/8
  2632.    If XNuovaPosizioneNota<>XPosizioneEvento
  2633.     IncrementoXEventoMusicale.l=XNuovaPosizioneNota-XPosizioneEvento
  2634.     EventoMusicaleSpostatoConIlTopo=True
  2635.    Else
  2636.     IncrementoXEventoMusicale=0
  2637.    EndIf
  2638.    If YNuovaPosizioneNota<>YPosizioneEvento
  2639.     IncrementoYEventoMusicale.b=YNuovaPosizioneNota-YPosizioneEvento
  2640.     EventoMusicaleSpostatoConIlTopo=True
  2641.    Else
  2642.     IncrementoYEventoMusicale=0
  2643.    EndIf
  2644.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  2645.     EventoMusicaleSpostatoConIlTopo=False
  2646.    Else
  2647.     Messaggio$="Note>"+Str$(IncrementoYEventoMusicale)
  2648.    EndIf
  2649.   Case "Program"
  2650.    XNuovaPosizioneProgramma.l=((XInizioAreaVisibile+NuovaXTopo-16)*ScalaNote)/LarghezzaEventoDiBase*LarghezzaEventoDiBase
  2651.    YNuovaPosizioneProgramma.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  2652.    If YNuovaPosizioneProgramma<0
  2653.     If NuovaYTopo<0 Then YNuovaPosizioneProgramma=127
  2654.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizioneProgramma=0
  2655.    EndIf
  2656.    If XNuovaPosizioneProgramma<>XPosizioneEvento
  2657.     IncrementoXEventoMusicale=XNuovaPosizioneProgramma-XPosizioneEvento
  2658.     EventoMusicaleSpostatoConIlTopo=True
  2659.    Else
  2660.     IncrementoXEventoMusicale=0
  2661.    EndIf
  2662.    If YNuovaPosizioneProgramma<>YPosizioneEvento
  2663.     IncrementoYEventoMusicale=YNuovaPosizioneProgramma-YPosizioneEvento
  2664.     EventoMusicaleSpostatoConIlTopo=True
  2665.    Else
  2666.     IncrementoYEventoMusicale=0
  2667.    EndIf
  2668.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  2669.     EventoMusicaleSpostatoConIlTopo=False
  2670.    Else
  2671.     Messaggio$="Program>"+Str$(IncrementoYEventoMusicale)
  2672.    EndIf
  2673.   Case "Control"
  2674.    XNuovaPosizioneControllo.l=((XInizioAreaVisibile+NuovaXTopo-16)*ScalaNote)/LarghezzaEventoDiBase*LarghezzaEventoDiBase
  2675.    YNuovaPosizioneControllo.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  2676.    If YNuovaPosizioneControllo<0
  2677.     If NuovaYTopo<0 Then YNuovaPosizioneControllo=127
  2678.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizioneControllo=0
  2679.    EndIf
  2680.    If XNuovaPosizioneControllo<>XPosizioneEvento
  2681.     IncrementoXEventoMusicale=XNuovaPosizioneControllo-XPosizioneEvento
  2682.     EventoMusicaleSpostatoConIlTopo=True
  2683.    Else
  2684.     IncrementoXEventoMusicale=0
  2685.    EndIf
  2686.    If YNuovaPosizioneControllo<>YPosizioneEvento
  2687.     IncrementoYEventoMusicale=YNuovaPosizioneControllo-YPosizioneEvento
  2688.     EventoMusicaleSpostatoConIlTopo=True
  2689.    Else
  2690.     IncrementoYEventoMusicale=0
  2691.    EndIf
  2692.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  2693.     EventoMusicaleSpostatoConIlTopo=False
  2694.    Else
  2695.     Messaggio$="Control>"+Str$(IncrementoYEventoMusicale)
  2696.    EndIf
  2697.   Case "Tempo"
  2698.    XNuovaPosizioneTempo.l=((XInizioAreaVisibile+NuovaXTopo-16)*ScalaNote)/LarghezzaEventoDiBase*LarghezzaEventoDiBase
  2699.    YNuovaPosizioneTempo.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  2700.    If YNuovaPosizioneTempo<0
  2701.     If NuovaYTopo<0 Then YNuovaPosizioneTempo=127
  2702.     If NuovaYTopo>AreaVisibileDeiValori Then YNuovaPosizioneTempo=0
  2703.    EndIf
  2704.    If XNuovaPosizioneTempo<>XPosizioneEvento
  2705.     IncrementoXEventoMusicale=XNuovaPosizioneTempo-XPosizioneEvento
  2706.     EventoMusicaleSpostatoConIlTopo=True
  2707.    Else
  2708.     IncrementoXEventoMusicale=0
  2709.    EndIf
  2710.    If YNuovaPosizioneTempo<>YPosizioneEvento
  2711.     IncrementoYEventoMusicale=YNuovaPosizioneTempo-YPosizioneEvento
  2712.     EventoMusicaleSpostatoConIlTopo=True
  2713.    Else
  2714.     IncrementoYEventoMusicale=0
  2715.    EndIf
  2716.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  2717.     EventoMusicaleSpostatoConIlTopo=False
  2718.    Else
  2719.     NuoviBattiti.b=IncrementoYEventoMusicale MOD 16
  2720.     NuoveMisure.b=Abs(IncrementoYEventoMusicale/16)
  2721.     Messaggio$="Tempo=":If Sgn(IncrementoYEventoMusicale)=-1 Then Messaggio$+"-"
  2722.     Messaggio$+Str$(NuoviBattiti)+"/"+Str$(NuoveMisure)
  2723.    EndIf
  2724.   End Select
  2725.   Select TipoDiEvento$
  2726.   Case "Note"
  2727.    NuovaXEvento.l=XNuovaPosizioneNota:NuovaYEvento.b=YNuovaPosizioneNota
  2728.   Case "Program"
  2729.    NuovaXEvento=XNuovaPosizioneProgramma:NuovaYEvento=YNuovaPosizioneProgramma
  2730.   Case "Control"
  2731.    NuovaXEvento=XNuovaPosizioneControllo:NuovaYEvento=YNuovaPosizioneControllo
  2732.   Case "Tempo"
  2733.    NuovaXEvento=XNuovaPosizioneTempo:NuovaYEvento=YNuovaPosizioneTempo
  2734.   End Select
  2735.   MostraNuovaPosizioneEvento{NuovaXEvento,NuovaYEvento}
  2736.   If EventoMusicaleSpostatoConIlTopo=False
  2737.    Messaggio$="No change made"
  2738.   EndIf
  2739.   XMessaggio.w=16*16+8*3+8*4+8*6
  2740.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  2741.   WLocate XMessaggio,YMessaggio
  2742.   Print SPACE$(80-XMessaggio/8)
  2743.   WLocate XMessaggio,YMessaggio
  2744.   WColour CanaleSelezionato-1,16-CanaleSelezionato
  2745.   Print Messaggio$
  2746.   If EventoMusicaleSpostatoConIlTopo=True
  2747.    Print " pos>":ConvertiIlTempoInBattute{IncrementoXEventoMusicale,Battiti,Misure,False}
  2748.   EndIf
  2749.   VWait
  2750.   MostraNuovaPosizioneEvento{NuovaXEvento,NuovaYEvento}
  2751.  Until TastoPremutoDelTopo<>#TastoSinistroDelTopoPremuto
  2752.  If EventoMusicaleSpostatoConIlTopo=True
  2753.   PushItem EventoMusicale()
  2754.   ResetList EventoMusicale()
  2755.   While NextItem(EventoMusicale())=True
  2756.    If EventoMusicale()\Sequenza=SequenzaSelezionata
  2757.     If EventoMusicale()\Tipo=TipoDiEvento$ AND EventoMusicale()\Selezionato=True
  2758.      EventoMusicale()\Evento+IncrementoYEventoMusicale
  2759.      EventoMusicale()\Evento=Min(Max(EventoMusicale()\Evento,0),127)
  2760.      EventoMusicale()\Inizio+IncrementoXEventoMusicale
  2761.      If EventoMusicale()\Inizio<0 Then EventoMusicale()\Inizio=0
  2762.      DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  2763.     EndIf
  2764.    EndIf
  2765.   Wend
  2766.   PopItem EventoMusicale()
  2767.  EndIf
  2768. End Statement
  2769.  
  2770. ;----------------------------------------
  2771. ;questa procedura suona la nota corrente
  2772. ;this procedure plays the current note
  2773. ;--------------------------------------
  2774. Statement SuonaLaNota{Nota.b,VelocitaNota.b,CanaleNota.b,Modo.b}
  2775. SHARED AltezzaInternaFinestraEditoreSequenza
  2776. SHARED EventoMusicale()
  2777. SHARED MIDIAttivato
  2778. SHARED NoteSuonate
  2779. SHARED PeriFreq()
  2780. SHARED Suono()
  2781. SHARED VoceSpenta
  2782.  For Suono.b=0 To 31
  2783.   If Suono(Suono)\Canale=CanaleNota Then Pop For:Goto FineCicloForEsecutoreNote
  2784.  Next Suono
  2785. FineCicloForEsecutoreNote
  2786.  If Suono<32
  2787.   If Suono(Suono)\Canale>0
  2788.    Periodo.l=PeriFreq(Nota)\Periodo
  2789.    If Periodo>=#PeriodoMinimo AND Periodo<65536
  2790.     If VoceSpenta>0
  2791.      If VoceSpenta BitTst 0=True Then Voce.b=1:VoceSpenta BitClr 0:Goto SuonaCampione
  2792.      If VoceSpenta BitTst 1=True Then Voce=2:VoceSpenta BitClr 1:Goto SuonaCampione
  2793.      If VoceSpenta BitTst 2=True Then Voce=4:VoceSpenta BitClr 2:Goto SuonaCampione
  2794.      If VoceSpenta BitTst 3=True Then Voce=8:VoceSPenta BitClr 3
  2795.     EndIf
  2796. SuonaCampione
  2797.     SetPeriod Suono,Periodo:Sound Suono,Voce
  2798.     EventoMusicale()\VoceUsata=Voce
  2799.     Messaggio$="Note>"+Str$(Nota)+" frequency>"+Str$(PeriFreq(Nota)\Frequenza)
  2800.    EndIf
  2801.   EndIf
  2802.  Else
  2803.   If MIDIAttivato=True
  2804.    ByteDiStatoMIDI.b=#_NoteOn+(CanaleNota-1)
  2805.    WriteSerial 0,ByteDiStatoMIDI
  2806.    WriteSerial 0,Nota
  2807.    WriteSerial 0,VelocitaNota
  2808.    Messaggio$="Note>"+Str$(Nota)+" vel>"+Str$(VelocitaNota)
  2809.    NoteSuonate+1
  2810.   EndIf
  2811.  EndIf
  2812.  If Modo=#EseguiGliEventiDallEditoreSequenza
  2813.   XMessaggio.w=16*16+8*3+8*4+8*6
  2814.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  2815.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  2816.   WLocate XMessaggio,YMessaggio
  2817.   WColour CanaleNota-1,16-CanaleNota
  2818.   Print Messaggio$
  2819.  EndIf
  2820. End Statement
  2821.  
  2822. ;-----------------------------------------------
  2823. ;questa procedura esegue il cambio di programma
  2824. ;this procedure execute the program change
  2825. ;------------------------------------------
  2826. Statement EseguiIlCambioDiProgramma{Programma,CanaleProgramma.b,Modo.b}
  2827. SHARED MIDIAttivato
  2828.  If MIDIAttivato=True
  2829.   ByteDiStatoMIDI.b=#_ProgramChange+(CanaleProgramma-1)
  2830.   WriteSerial 0,ByteDiStatoMIDI
  2831.   WriteSerial 0,Programma
  2832.  EndIf
  2833.  If Modo=#EseguiGliEventiDallEditoreSequenza
  2834.   XMessaggio.w=16*16+8*3+8*4+8*6
  2835.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  2836.   Messaggio$="Program>"+Str$(Programma)
  2837.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  2838.   WLocate XMessaggio,YMessaggio
  2839.   WColour CanaleProgramma-1,16-CanaleProgramma
  2840.   Print Messaggio$
  2841.  EndIf
  2842. End Statement
  2843.  
  2844. ;-----------------------------------------------
  2845. ;questa procedura esegue il cambio di controllo
  2846. ;this procedure execute the control change
  2847. ;------------------------------------------
  2848. Statement EseguiIlCambioDiControllo{Controllo,ValoreControllo,CanaleControllo.b,Modo.b}
  2849.  If MIDIAttivato=True
  2850.   ByteDiStatoMIDI.b=#_ControlChange+(CanaleControllo-1)
  2851.   WriteSerial 0,ByteDiStatoMIDI
  2852.   WriteSerial 0,Controllo
  2853.   WriteSerial 0,ValoreControllo
  2854.  EndIf
  2855.  If Modo=#EseguiGliEventiDallEditoreSequenza
  2856.   XMessaggio.w=16*16+8*3+8*4+8*6
  2857.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  2858.   Messaggio$="Control>"+Str$(Controllo)+" val>"+Str$(ValoreControllo)
  2859.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  2860.   WLocate XMessaggio,YMessaggio
  2861.   WColour CanaleControllo-1,16-CanaleControllo
  2862.   Print Messaggio$
  2863.  EndIf
  2864. End Statement
  2865.  
  2866. ;-----------------------------------------------------
  2867. ;questa procedura interrompe la nota suonata corrente
  2868. ;this procedure stops the current played note
  2869. ;---------------------------------------------
  2870. Statement SmettiDiSuonareLaNota{Nota.b,VelocitaNota.b,CanaleNota.b,Modo.b}
  2871. SHARED AltezzaInternaFinestraEditoreSequenza
  2872. SHARED EventoMusicale()
  2873. SHARED MIDIAttivato
  2874. SHARED NoteSuonate
  2875. SHARED VoceSpenta
  2876.  VoceUsata.b=EventoMusicale()\VoceUsata
  2877.  If VoceUsata>0
  2878.   Quiet VoceUsata
  2879.   VoceSpenta OR VoceUsata
  2880.  Else
  2881.   If MIDIAttivato=True
  2882.    ByteDiStatoMIDI=#_NoteOff+(CanaleNota-1)
  2883.    WriteSerial 0,ByteDiStatoMIDI
  2884.    WriteSerial 0,Nota
  2885.    WriteSerial 0,VelocitaNota
  2886.    NoteSuonate-1
  2887.   EndIf
  2888.  EndIf
  2889. End Statement
  2890.  
  2891. ;----------------------------------------------------------
  2892. ;questa procedura interrompe l'esecuzione di tutte le note
  2893. ;this procedure stops all notes execution
  2894. ;-----------------------------------------
  2895. Statement InterrompiTutteLeNote{Modo.b}
  2896.  WriteSerial 0,#_AllNotesOff
  2897.  If Modo=#EseguiGliEventiDallEditoreSequenza
  2898.   XMessaggio.w=16*16+8*3+8*4+8*6
  2899.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  2900.   Messaggio$="AllNotesOff"
  2901.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  2902.   WLocate XMessaggio,YMessaggio
  2903.   WColour 3,2
  2904.   Print Messaggio$
  2905.  EndIf
  2906. End Statement
  2907.  
  2908. ;----------------------------------------------------------------------
  2909. ;questa procedura imposta il menu della finestra dell'editore sequenza
  2910. ;this procedure sets the sequence editor window menu
  2911. ;----------------------------------------------------
  2912. Statement ImpostaMenuFinestraEditoreSequenza{}
  2913. SHARED MostraNuovoValore
  2914. SHARED TipoDiEvento$
  2915.  
  2916.  Free MenuList #ListaMenuEditoreSequenza
  2917.  
  2918.  MenuTitle #ListaMenuEditoreSequenza,0,"Controls"
  2919.  MenuItem #ListaMenuEditoreSequenza,0,0,0,"Play"
  2920.  
  2921.  MenuTitle #ListaMenuEditoreSequenza,1,"Event type"
  2922.  Select TipoDiEvento$
  2923.  Case "Note"
  2924.   MenuItem #ListaMenuEditoreSequenza,4,1,0,"  Note"
  2925.   MenuItem #ListaMenuEditoreSequenza,2,1,1,"  Program"
  2926.   MenuItem #ListaMenuEditoreSequenza,2,1,2,"  Control"
  2927.   MenuItem #ListaMenuEditoreSequenza,2,1,3,"  Tempo"
  2928.  Case "Program"
  2929.   MenuItem #ListaMenuEditoreSequenza,2,1,0,"  Note"
  2930.   MenuItem #ListaMenuEditoreSequenza,4,1,1,"  Program"
  2931.   MenuItem #ListaMenuEditoreSequenza,2,1,2,"  Control"
  2932.   MenuItem #ListaMenuEditoreSequenza,2,1,3,"  Tempo"
  2933.  Case "Control"
  2934.   MenuItem #ListaMenuEditoreSequenza,2,1,0,"  Note"
  2935.   MenuItem #ListaMenuEditoreSequenza,2,1,1,"  Program"
  2936.   MenuItem #ListaMenuEditoreSequenza,4,1,2,"  Control"
  2937.   MenuItem #ListaMenuEditoreSequenza,2,1,3,"  Tempo"
  2938.  Case "Tempo"
  2939.   MenuItem #ListaMenuEditoreSequenza,2,1,0,"  Note"
  2940.   MenuItem #ListaMenuEditoreSequenza,2,1,1,"  Program"
  2941.   MenuItem #ListaMenuEditoreSequenza,2,1,2,"  Control"
  2942.   MenuItem #ListaMenuEditoreSequenza,4,1,3,"  Tempo"
  2943.  End Select
  2944.  
  2945.  MenuTitle #ListaMenuEditoreSequenza,2,"Settings"
  2946.  MenuItem #ListaMenuEditoreSequenza,0,2,0,"Basic event"
  2947.  If MostraNuovoValore=True
  2948.   MenuItem #ListaMenuEditoreSequenza,3,2,1,"  Show dragged event value"
  2949.  Else
  2950.   MenuItem #ListaMenuEditoreSequenza,1,2,1,"  Show dragged event value"
  2951.  EndIf
  2952.  
  2953.  MenuTitle #ListaMenuEditoreSequenza,3,"Help"
  2954.  MenuItem #ListaMenuEditoreSequenza,0,3,0,"Keys to use"
  2955.  MenuItem #ListaMenuEditoreSequenza,0,3,1,"Notes on keys"
  2956.  
  2957. ;-------------------------------
  2958. ;attacca il menu' alla finestra
  2959. ;attaches menu to window
  2960. ;------------------------
  2961.  SetMenu #ListaMenuEditoreSequenza
  2962.  
  2963. End Statement
  2964.  
  2965. ;----------------------------------------------
  2966. ;questa procedura modifica gli eventi musicali
  2967. ;this procedure modifies the musical events
  2968. ;-------------------------------------------
  2969. Statement Selezione{Modo.b}
  2970. SHARED AltezzaInternaFinestraEditoreSequenza
  2971. SHARED AreaVisibileDeiValori
  2972. SHARED Battiti
  2973. SHARED CanaleSelezionato
  2974. SHARED ColoriOriginali
  2975. SHARED DurataSequenza
  2976. SHARED Eventi
  2977. SHARED EventiSelezionati
  2978. SHARED EventoMusicale()
  2979. SHARED EventoMusicaleSpostatoConIlTopo
  2980. SHARED LarghezzaInternaFinestraEditoreSequenza
  2981. SHARED LarghezzaEventoDiBase
  2982. SHARED MIDIAttivato
  2983. SHARED Misure
  2984. SHARED NotaSuonata
  2985. SHARED PeriFreq()
  2986. SHARED ScalaNote
  2987. SHARED SequenzaSelezionata
  2988. SHARED Suono()
  2989. SHARED TipoDiEvento$
  2990. SHARED ValoreEventoDiBase
  2991. SHARED XInizioAreaVisibile
  2992. SHARED XPosizioneNota
  2993. SHARED XTopo
  2994. SHARED YInizioAreaVisibile
  2995. SHARED YPosizioneNota
  2996. SHARED YTopo
  2997.  ResetList EventoMusicale()
  2998.  StessoEvento.b=%00000
  2999.  XTopo=Min(Max(XTopo,16),LarghezzaInternaFinestraEditoreSequenza-1)
  3000.  While NextItem(EventoMusicale())=True
  3001.   StessoEvento=%00000
  3002.   TipoDiEventoSelezionato$=EventoMusicale()\Tipo
  3003.   InizioEvento.l=EventoMusicale()\Inizio
  3004.   CanaleEvento.b=EventoMusicale()\Canale
  3005.   SequenzaEvento.w=EventoMusicale()\Sequenza
  3006.   EventoSelezionato.b=EventoMusicale()\Selezionato
  3007.   If Modo=#SelezionaUnEvento
  3008.    Select TipoDiEventoSelezionato$
  3009.    Case "Note"
  3010.     YTopo=Min(Max(YTopo,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  3011.     Nota.b=EventoMusicale()\Evento
  3012.     DurataNota.l=EventoMusicale()\Durata
  3013.     FineNota.l=InizioEvento+DurataNota-1
  3014.     VelocitaNota.b=EventoMusicale()\Valore
  3015.     XPosizioneNota=((XInizioAreaVisibile+XTopo-16)*ScalaNote)/LarghezzaEventoDiBase*LarghezzaEventoDiBase
  3016.     YPosizioneNota=127-YInizioAreaVisibile-YTopo/8
  3017.     If XPosizioneNota>=InizioEvento Then StessoEvento OR %00001
  3018.     If XPosizioneNota<=FineNota Then StessoEvento OR %00010
  3019.     If YPosizioneNota=Nota Then StessoEvento OR %00100
  3020.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento OR %01000
  3021.     If StessoEvento=%01111
  3022.      If CanaleSelezionato<>CanaleEvento
  3023.       AggiungiEvento.b=EZRequest("AmySequencer message","Would you add a new note|with the current channel?","Yes|No")
  3024.       If AggiungiEvento=0
  3025.        Format "00"
  3026.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3027.        If ColoriOriginali=True
  3028.         WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3029.        Else
  3030.         WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2:Print Str$(CanaleSelezionato)
  3031.        EndIf
  3032.        CanaleSelezionato=CanaleEvento
  3033.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3034.        WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3035.        Format ""
  3036.        StessoEvento OR %10000
  3037.       EndIf
  3038.      Else
  3039.       TipoDiEvento$=TipoDiEventoSelezionato$
  3040.       ImpostaMenuFinestraEditoreSequenza{}
  3041.       StessoEvento OR %10000
  3042.      EndIf
  3043.      If EventoSelezionato=True
  3044.       MuoviGliEventiSelezionatiConIlTopo{XPosizioneNota,YPosizioneNota}
  3045.       If EventoMusicaleSpostatoConIlTopo=False
  3046.        EventiSelezionati-1
  3047.        EventoMusicale()\Selezionato=False
  3048.       Else
  3049.        Nota=EventoMusicale()\Evento
  3050.        InizioNota=EventoMusicale()\Inizio
  3051.       EndIf
  3052.      Else
  3053.       NotaPiuLunga.l=DurataNota
  3054.       EventiSelezionati+1
  3055.       EventoMusicale()\Selezionato=True
  3056.      EndIf
  3057.      If NotaSuonata\Eseguito=True
  3058.       SmettiDiSuonareLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiDallEditoreSequenza}
  3059.      EndIf
  3060.      SuonaLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiDallEditoreSequenza}
  3061.      NotaSuonata\Evento=Nota,InizioNota,CanaleEvento
  3062.      NotaSuonata\Durata=DurataNota,VelocitaNota
  3063.      NotaSuonata\Eseguito=True
  3064.      Pop While:Goto FineCicloWhile
  3065.     EndIf
  3066.    Case "Program"
  3067.     YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  3068.     Programma.b=EventoMusicale()\Evento
  3069.     LunghezzaEvento.w=Len("Program000")*8
  3070.     If EventoSelezionato=True Then LunghezzaEvento+Len("X")*8
  3071.     FineProgramma.w=InizioEvento+LunghezzaEvento-1
  3072.     XPosizioneProgramma.w=((XInizioAreaVisibile+XTopo-16)*ScalaNote)/LarghezzaEventoDiBase*LarghezzaEventoDiBase
  3073.     YPosizioneProgramma.b=127-YTopo*127/AreaVisibileDeiValori
  3074.     If XPosizioneProgramma>=InizioEvento Then StessoEvento OR %00001
  3075.     If XPosizioneProgramma<FineProgramma Then StessoEvento OR %00010
  3076.     If YPosizioneProgramma=Programma Then StessoEvento OR %00100
  3077.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento OR %01000
  3078.     If StessoEvento=%01111
  3079.      If CanaleSelezionato<>CanaleEvento
  3080.       AggiungiEvento.b=EZRequest("AmySequencer message","Would you add a new program|with the current channel?","Yes|No")
  3081.       If AggiungiEvento=0
  3082.        Format "00"
  3083.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3084.        If ColoriOriginali=True
  3085.         WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3086.        Else
  3087.         WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2:Print Str$(CanaleSelezionato)
  3088.        EndIf
  3089.        CanaleSelezionato=CanaleEvento
  3090.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3091.        WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3092.        Format ""
  3093.        StessoEvento OR %10000
  3094.       EndIf
  3095.      Else
  3096.       TipoDiEvento$=TipoDiEventoSelezionato$
  3097.       ImpostaMenuFinestraEditoreSequenza{}
  3098.       StessoEvento OR %10000
  3099.      EndIf
  3100.      If EventoSelezionato=True
  3101.       MuoviGliEventiSelezionatiConIlTopo{XPosizioneProgramma,YPosizioneProgramma}
  3102.       If EventoMusicaleSpostatoConIlTopo=False
  3103.        EventiSelezionati-1
  3104.        EventoMusicale()\Selezionato=False
  3105.       EndIf
  3106.      Else
  3107.       EventiSelezionati+1
  3108.       EventoMusicale()\Selezionato=True
  3109.      EndIf
  3110.      Pop While:Goto FineCicloWhile
  3111.     EndIf
  3112.    Case "Control"
  3113.     YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  3114.     Controllo.b=EventoMusicale()\Evento
  3115.     LunghezzaEvento.w=Len("Control000")*8
  3116.     If EventoSelezionato=True Then LunghezzaEvento+Len("X")*8
  3117.     FineControllo.w=InizioEvento+LunghezzaEvento-1
  3118.     XPosizioneControllo.w=((XInizioAreaVisibile+XTopo-16)*ScalaNote)/LarghezzaEventoDiBase*LarghezzaEventoDiBase
  3119.     YPosizioneControllo.b=127-YTopo*127/AreaVisibileDeiValori
  3120.     If XPosizioneControllo>=InizioEvento Then StessoEvento OR %00001
  3121.     If XPosizioneControllo<FineControllo Then StessoEvento OR %00010
  3122.     If YPosizioneControllo=Controllo Then StessoEvento OR %00100
  3123.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento OR %01000
  3124.     If StessoEvento=%01111
  3125.      If CanaleSelezionato<>CanaleEvento
  3126.       AggiungiEvento.b=EZRequest("AmySequencer message","Would you add a new control|with the current channel?","Yes|No")
  3127.       If AggiungiEvento=0
  3128.        Format "00"
  3129.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3130.        If ColoriOriginali=True
  3131.         WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3132.        Else
  3133.         WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2:Print Str$(CanaleSelezionato)
  3134.        EndIf
  3135.        CanaleSelezionato=CanaleEvento
  3136.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3137.        WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3138.        Format ""
  3139.        StessoEvento OR %10000
  3140.       EndIf
  3141.      Else
  3142.       TipoDiEvento$=TipoDiEventoSelezionato$
  3143.       ImpostaMenuFinestraEditoreSequenza{}
  3144.       StessoEvento OR %10000
  3145.      EndIf
  3146.      If EventoSelezionato=True
  3147.       MuoviGliEventiSelezionatiConIlTopo{XPosizioneControllo,YPosizioneControllo}
  3148.       If EventoMusicaleSpostatoConIlTopo=False
  3149.        EventiSelezionati-1
  3150.        EventoMusicale()\Selezionato=False
  3151.       EndIf
  3152.      Else
  3153.       EventiSelezionati+1
  3154.       EventoMusicale()\Selezionato=True
  3155.      EndIf
  3156.      Pop While:Goto FineCicloWhile
  3157.     EndIf
  3158.    Case "Tempo"
  3159.     YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  3160.     Tempo.b=EventoMusicale()\Evento
  3161.     LunghezzaEvento.w=Len("Tempo=00/00")*8
  3162.     If EventoSelezionato=True Then LunghezzaEvento+Len("X")*8
  3163.     FineTempo.w=InizioEvento+LunghezzaEvento-1
  3164.     XPosizioneTempo.w=((XInizioAreaVisibile+XTopo-16)*ScalaNote)/LarghezzaEventoDiBase*LarghezzaEventoDiBase
  3165.     YPosizioneTempo.b=127-YTopo*127/AreaVisibileDeiValori
  3166.     If XPosizioneTempo>=InizioEvento Then StessoEvento OR %00001
  3167.     If XPosizioneTempo<FineTempo Then StessoEvento OR %00010
  3168.     If YPosizioneTempo=Tempo Then StessoEvento OR %00100
  3169.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento OR %01000
  3170.     If StessoEvento=%01111
  3171.      If CanaleSelezionato<>CanaleEvento
  3172.       AggiungiEvento.b=EZRequest("AmySequencer message","Would you add a new tempo|with the current channel?","Yes|No")
  3173.       If AggiungiEvento=0
  3174.        Format "00"
  3175.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3176.        If ColoriOriginali=True
  3177.         WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3178.        Else
  3179.         WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2:Print Str$(CanaleSelezionato)
  3180.        EndIf
  3181.        CanaleSelezionato=CanaleEvento
  3182.        WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3183.        WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3184.        Format ""
  3185.        StessoEvento OR %10000
  3186.       EndIf
  3187.      Else
  3188.       TipoDiEvento$=TipoDiEventoSelezionato$
  3189.       ImpostaMenuFinestraEditoreSequenza{}
  3190.       StessoEvento OR %10000
  3191.      EndIf
  3192.      If EventoSelezionato=True
  3193.       MuoviGliEventiSelezionatiConIlTopo{XPosizioneTempo,YPosizioneTempo}
  3194.       If EventoMusicaleSpostatoConIlTopo=False
  3195.        EventiSelezionati-1
  3196.        EventoMusicale()\Selezionato=False
  3197.       EndIf
  3198.      Else
  3199.       EventiSelezionati+1
  3200.       EventoMusicale()\Selezionato=True
  3201.      EndIf
  3202.      Pop While:Goto FineCicloWhile
  3203.     EndIf
  3204.    End Select
  3205.   Else
  3206.    If EventoMusicale()\Sequenza=SequenzaSelezionata
  3207.     If EventoSelezionato=True
  3208.      Select Modo
  3209.      Case #CambiaIlCanaleDegliEventiSelezionati
  3210.       EventoMusicale()\Canale=CanaleSelezionato
  3211.      Case #AlzaDiUnoGliEventiSelezionati
  3212.       If EventoMusicale()\Evento<127 Then EventoMusicale()\Evento+1
  3213.      Case #AbbassaDiUnoGliEventiSelezionati
  3214.       If EventoMusicale()\Evento>0 Then EventoMusicale()\Evento-1
  3215.      Case #SpostaAvantiNelTempoGliEventiSelezionati
  3216.       EventoMusicale()\Inizio+LarghezzaEventoDiBase
  3217.       DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  3218.      Case #SpostaIndietroNelTempoGliEventiSelezionati
  3219.       EventoMusicale()\Inizio-LarghezzaEventoDiBase:If EventoMusicale()\Inizio<0 Then EventoMusicale()\Inizio=0
  3220.      Case #EliminaGliEventiSelezionati
  3221.       If Eventi>0
  3222.        If EventoMusicale()\Selezionato=True Then EventiSelezionati-1
  3223.        If InizioEvento+EventoMusicale()\Durata>=DurataSequenza Then DurataSequenza-EventoMusicale()\Durata
  3224.        XInizioAreaVisibile-EventoMusicale()\Durata
  3225.        XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  3226.        KillItem EventoMusicale():Eventi-1
  3227.        If Eventi=0 Then DurataSequenza=0
  3228.       EndIf
  3229.      Case #DeselezionaTuttiGliEventi
  3230.       EventiSelezionati-1
  3231.       EventoMusicale()\Selezionato=False
  3232.      Case #InvertiLaSelezioneDiTuttiGliEventi
  3233.       EventiSelezionati-1
  3234.       EventoMusicale()\Selezionato=False
  3235.      End Select
  3236.      Select TipoDiEventoSelezionato$
  3237.      Case "Note"
  3238.       Select Modo
  3239.       Case #AllungaLaDurataDelleNoteSelezionate
  3240.        If EventoMusicale()\Durata=#_MClksPerSP
  3241.         EventoMusicale()\Durata=LarghezzaEventoDiBase
  3242.        Else
  3243.         EventoMusicale()\Durata+LarghezzaEventoDiBase
  3244.        EndIf
  3245.        NotaPiuLunga=Max(NotaPiuLunga,EventoMusicale()\Durata)
  3246.        DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  3247.       Case #RiduciLaDurataDelleNoteSelezionate
  3248.        EventoMusicale()\Durata-LarghezzaEventoDiBase
  3249.        EventoMusicale()\Durata=Max(EventoMusicale()\Durata,#_MClksPerSP)
  3250.        NotaPiuLunga=Max(EventoMusicale()\Durata,NotaPiuLunga)
  3251.       Case #AlzaDiUnOttavaLeNoteSelezionate
  3252.        EventoMusicale()\Evento+12
  3253.        EventoMusicale()\Evento=Min(EventoMusicale()\Evento,127)
  3254.       Case #AbbassaDiUnOttavaLeNoteSelezionate
  3255.        EventoMusicale()\Evento-12
  3256.        EventoMusicale()\Evento=Max(EventoMusicale()\Evento,0)
  3257.       Case #CambiaIlValoreDegliEventiSelezionati
  3258.        EventoMusicale()\Valore=ValoreEventoDiBase
  3259.       End Select
  3260.      Case "Tempo"
  3261.       NuoviBattiti.b=EventoMusicale()\Evento MOD 16
  3262.       NuoveMisure.b=EventoMusicale()\Evento/16
  3263.       Select Modo
  3264.       Case #AggiungiUnBattitoAlTempoSelezionato
  3265.        NuoviBattiti+1
  3266.        NuoviBattiti=Min(NuoviBattiti,15)
  3267.       Case #TogliUnBattitoAlTempoSelezionato
  3268.        NuoviBattiti-1
  3269.        NuoviBattiti=Max(NuoviBattiti,0)
  3270.       Case #AggiungiUnaMisuraAlTempoSelezionato
  3271.        NuoveMisure+1
  3272.        NuoveMisure=Min(NuoveMisure,7)
  3273.       Case #TogliUnaMisuraAlTempoSelezionato
  3274.        NuoveMisure-1
  3275.        NuoveMisure=Max(NuoveMisure,0)
  3276.       End Select
  3277.       EventoMusicale()\Evento=NuoveMisure*16+NuoviBattiti
  3278.      Default
  3279.       Select Modo
  3280.       Case #AggiungiDieciAgliEventiSelezionati
  3281.        EventoMusicale()\Evento+10
  3282.        EventoMusicale()\Evento=Min(EventoMusicale()\Evento,127)
  3283.       Case #SottraiDieciAgliEventiSelezionati
  3284.        EventoMusicale()\Evento-10
  3285.        EventoMusicale()\Evento=Max(EventoMusicale()\Evento,0)
  3286.       End Select
  3287.      End Select
  3288.     Else
  3289.      Select Modo
  3290.      Case #SelezionaTuttiGliEventi
  3291.       EventiSelezionati+1
  3292.       EventoMusicale()\Selezionato=True
  3293.      Case #InvertiLaSelezioneDiTuttiGliEventi
  3294.       EventiSelezionati+1
  3295.       EventoMusicale()\Selezionato=True
  3296.      End Select
  3297.     EndIf
  3298.    EndIf
  3299.   EndIf
  3300.  Wend
  3301. FineCicloWhile
  3302.  If Modo=#SelezionaUnEvento AND StessoEvento<%11111
  3303.   If CanaleSelezionato>0
  3304.    LastItem EventoMusicale()
  3305.    If AddItem(EventoMusicale())=True
  3306.     Eventi+1
  3307.     EventoMusicale()\Inizio=((XInizioAreaVisibile+XTopo-16)*ScalaNote)/LarghezzaEventoDiBase*LarghezzaEventoDiBase
  3308.     EventoMusicale()\Canale=CanaleSelezionato
  3309.     EventoMusicale()\Sequenza=SequenzaSelezionata
  3310.     EventoMusicale()\Selezionato=False
  3311.     EventoMusicale()\Tipo=TipoDiEvento$
  3312.     Select TipoDiEvento$
  3313.     Case "Note"
  3314.      YTopo=Min(Max(YTopo,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  3315.      EventoMusicale()\Evento=127-YInizioAreaVisibile-YTopo/8
  3316.      EventoMusicale()\Durata=LarghezzaEventoDiBase
  3317.      EventoMusicale()\Valore=ValoreEventoDiBase
  3318.      If NotaSuonata\Eseguito=True
  3319.       SmettiDiSuonareLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiDallEditoreSequenza}
  3320.      EndIf
  3321.      NotaSuonata\Evento=EventoMusicale()\Evento,EventoMusicale()\Inizio,EventoMusicale()\Canale,EventoMusicale()\Sequenza
  3322.      NotaSuonata\Durata=EventoMusicale()\Durata,EventoMusicale()\Valore
  3323.      SuonaLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiDallEditoreSequenza}
  3324.      NotaSuonata\Eseguito=True
  3325.     Case "Program"
  3326.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  3327.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  3328.      EventoMusicale()\Durata=2
  3329.     Case "Control"
  3330.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  3331.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  3332.      EventoMusicale()\Durata=2
  3333.      EventoMusicale()\Valore=ValoreEventoDiBase
  3334.     Case "Tempo"
  3335.      YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori)
  3336.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  3337.      EventoMusicale()\Durata=2
  3338.     End Select
  3339.     DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  3340.    Else
  3341.     EZRequest "AmySequencer message","You have used all the available events","OK"
  3342.    EndIf
  3343.   Else
  3344.    EZRequest "AmySequencer message","You must select a channel first","OK"
  3345.   EndIf
  3346.  EndIf
  3347.  If Modo=#SelezionaGliEventiUguali
  3348.   ResetList EventoMusicale()
  3349.   Nota=127-YInizioAreaVisibile-YTopo/8
  3350.   While NextItem(EventoMusicale())=True
  3351.    If  EventoMusicale()\Canale=CanaleSelezionato AND EventoMusicale()\Sequenza=SequenzaSelezionata
  3352.     If EventoMusicale()\Selezionato=False
  3353.      Select TipoDiEvento$
  3354.      Case "Note"
  3355.       If EventoMusicale()\Evento=Nota
  3356.        EventiSelezionati+1
  3357.        EventoMusicale()\Selezionato=True
  3358.       EndIf
  3359.      Case "Program"
  3360.       If EventoMusicale()\Evento=Programma
  3361.        EventiSelezionati+1
  3362.        EventoMusicale()\Selezionato=True
  3363.       EndIf
  3364.      Case "Control"
  3365.       If EventoMusicale()\Evento=Controllo
  3366.        EventiSelezionati+1
  3367.        EventoMusicale()\Selezionato=True
  3368.       EndIf
  3369.      Case "Tempo"
  3370.       If EventoMusicale()\Evento=Tempo
  3371.        EventiSelezionati+1
  3372.        EventoMusicale()\Selezionato=True
  3373.       EndIf
  3374.      End Select
  3375.     EndIf
  3376.    EndIf
  3377.   Wend
  3378.  EndIf
  3379.  If NotaPiuLunga>0
  3380.   XMessaggio.w=16*16+8*3+8*4+8*6
  3381.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  3382.   WLocate XMessaggio,YMessaggio
  3383.   WColour 1,0
  3384.   Print SPACE$(80-XMessaggio/8)
  3385.   WLocate XMessaggio,YMessaggio
  3386.   Print "Len>":ConvertiIlTempoInBattute{NotaPiuLunga,Battiti,Misure,True}
  3387.  EndIf
  3388. End Statement
  3389.  
  3390. ;-----------------------------------------------
  3391. ;questa procedura si occupa eseguire gli eventi
  3392. ;this procedure executes the events
  3393. ;-----------------------------------
  3394. Statement EseguiGliEventi{Modo.b}
  3395. SHARED AltezzaInternaFinestraEditoreSequenza
  3396. SHARED DurataSequenza
  3397. SHARED EventoMusicale()
  3398. SHARED FineMotivo
  3399. SHARED Sequenza()
  3400. SHARED SequenzaSelezionata
  3401. SHARED TicPerCinquantesimoDiSecondo
  3402.  ResetTimer
  3403.  Tempo.l=Timer
  3404.  If Modo=#EseguiGliEventiDallaFinestraPrincipale Then FineEsecuzione.l=FineMotivo
  3405.  If Modo=#EseguiGliEventiDallEditoreSequenza Then FineEsecuzione=DurataSequenza
  3406.  Repeat
  3407.   Tempo=Timer*TicPerCinquantesimoDiSecondo
  3408.   EventoFinestraEsecutoreEventiMusicali.l=Event
  3409.   If EventoFinestraEsecutoreEventiMusicali=#HaiChiusoLaFinestra Then Pop Repeat:Statement Return
  3410.   ResetList EventoMusicale()
  3411.   While NextItem(EventoMusicale())
  3412.    SequenzaEvento.w=EventoMusicale()\Sequenza
  3413.    If SequenzaEvento=SequenzaSelezionata OR Modo=#EseguiGliEventiDallaFinestraPrincipale
  3414.     If Modo=#EseguiGliEventiDallaFinestraPrincipale
  3415.      InizioEvento.l=Sequenza(SequenzaEvento)\Inizio+EventoMusicale()\Inizio
  3416.     EndIf
  3417.     If Modo=#EseguiGliEventiDallEditoreSequenza
  3418.      InizioEvento.l=EventoMusicale()\Inizio
  3419.     EndIf
  3420.     TipoDiEvento$=EventoMusicale()\Tipo
  3421.     DurataEvento.l=EventoMusicale()\Durata
  3422.     FineEvento.l=InizioEvento+DurataEvento-1
  3423.     CanaleEvento.b=EventoMusicale()\Canale
  3424.     EventoEseguito.b=EventoMusicale()\Eseguito
  3425.     If EventoEseguito=0 AND Tempo>=InizioEvento
  3426.      If TipoDiEvento$="Note"
  3427.       Nota.b=EventoMusicale()\Evento
  3428.       VelocitaNota.b=EventoMusicale()\Valore
  3429.       SuonaLaNota{Nota,VelocitaNota,CanaleEvento,Modo}
  3430.       If Modo=#EseguiGliEventiDallEditoreSequenza
  3431.        DisegnaUnEventoMusicale{"Note",Nota,InizioEvento,DurataEvento,CanaleEvento,#EventoEvidenziato}
  3432.       EndIf
  3433.      Else
  3434.       Select TipoDiEvento$
  3435.       Case "Program"
  3436.        Programma.b=EventoMusicale()\Evento
  3437.        EseguiIlCambioDiProgramma{Programma,CanaleEvento,Modo}
  3438.       Case "Control"
  3439.        Controllo.b=EventoMusicale()\Evento:ValoreEvento.b=EventoMusicale()\Valore
  3440.        EseguiIlCambioDiControllo{Controllo,ValoreEvento,CanaleEvento,Modo}
  3441.       Case "Tempo"
  3442.        TempoCambiato.b=EventoMusicale()\Evento
  3443.        MostraIlTempo{TempoCambiato,Modo}
  3444.       End Select
  3445.      EndIf
  3446.      EventoMusicale()\Eseguito=1
  3447.     EndIf
  3448.     If EventoEseguito=1 AND Tempo>=FineEvento
  3449.      Nota=EventoMusicale()\Evento
  3450.      VelocitaNota=EventoMusicale()\Valore
  3451.      EventoSelezionato.b=EventoMusicale()\Selezionato
  3452.      If TipoDiEvento$="Note"
  3453.       SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleEvento,Modo}
  3454.       If Modo=#EseguiGliEventiDallEditoreSequenza
  3455.        If EventoSelezionato=True
  3456.         DisegnaUnEventoMusicale{"Note",Nota,InizioEvento,DurataEvento,CanaleEvento,#EventoSelezionato}
  3457.        Else
  3458.         DisegnaUnEventoMusicale{"Note",Nota,InizioEvento,DurataEvento,CanaleEvento,#EventoNonSelezionato}
  3459.        EndIf
  3460.       EndIf
  3461.      EndIf
  3462.      EventoMusicale()\Eseguito=2
  3463.     EndIf
  3464.    EndIf
  3465.   Wend
  3466.  Until Tempo>=FineEsecuzione
  3467.  ResetList EventoMusicale()
  3468.  While NextItem(EventoMusicale())
  3469.   If EventoMusicale()\Tipo="Note" AND EventoMusicale()\Eseguito=1
  3470.    Nota=EventoMusicale()\Evento
  3471.    VelocitaNota=EventoMusicale()\Valore
  3472.    CanaleEvento=EventoMusicale()\Canale
  3473.    SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleEvento,0}
  3474.   EndIf
  3475.   EventoMusicale()\Eseguito=0
  3476.  Wend
  3477.  Quiet %1111
  3478. End Statement
  3479.  
  3480. Statement AggiungiUnaNotaDallaTastiera{Nota$}
  3481. SHARED AreaInvisibileDelleNote
  3482. SHARED CanaleSelezionato
  3483. SHARED DurataSequenza
  3484. SHARED Eventi
  3485. SHARED EventoMusicale()
  3486. SHARED LarghezzaEventoDiBase
  3487. SHARED NotaSuonata
  3488. SHARED OttavaSelezionata
  3489. SHARED ScalaNote
  3490. SHARED SequenzaSelezionata
  3491. SHARED ValoreEventoDiBase
  3492. SHARED XInizioAreaVisibile
  3493.  Select Nota$
  3494.  Case "C1"
  3495.   Nota.b=0
  3496.  Case "C#1"
  3497.   Nota=1
  3498.  Case "D1"
  3499.   Nota=2
  3500.  Case "D#1"
  3501.   Nota=3
  3502.  Case "E1"
  3503.   Nota=4
  3504.  Case "F1"
  3505.   Nota=5
  3506.  Case "F#1"
  3507.   Nota=6
  3508.  Case "G1"
  3509.   Nota=7
  3510.  Case "G#1"
  3511.   Nota=8
  3512.  Case "A1"
  3513.   Nota=9
  3514.  Case "A#1"
  3515.   Nota=10
  3516.  Case "B1"
  3517.   Nota=11
  3518.  Case "C2"
  3519.   Nota=12
  3520.  Case "C#2"
  3521.   Nota=13
  3522.  Case "D2"
  3523.   Nota=14
  3524.  Case "D#2"
  3525.   Nota=15
  3526.  Case "E2"
  3527.   Nota=16
  3528.  Case "F2"
  3529.   Nota=17
  3530.  Case "F#2"
  3531.   Nota=18
  3532.  Case "G2"
  3533.   Nota=19
  3534.  Case "G#2"
  3535.   Nota=20
  3536.  Case "A2"
  3537.   Nota=21
  3538.  Case "A#2"
  3539.   Nota=22
  3540.  Case "B2"
  3541.   Nota=23
  3542.  End Select
  3543.  Nota+OttavaSelezionata*12:Nota=Min(Nota,127)
  3544.  If CanaleSelezionato>0
  3545.   LastItem EventoMusicale()
  3546.   If AddItem(EventoMusicale())=True
  3547.    Eventi+1
  3548.    EventoMusicale()\Tipo="Note"
  3549.    EventoMusicale()\Evento=Nota
  3550.    EventoMusicale()\Inizio=DurataSequenza/LarghezzaEventoDiBase*LarghezzaEventoDiBase
  3551.    EventoMusicale()\Canale=CanaleSelezionato
  3552.    EventoMusicale()\Sequenza=SequenzaSelezionata
  3553.    EventoMusicale()\Selezionato=False
  3554.    EventoMusicale()\Durata=LarghezzaEventoDiBase
  3555.    EventoMusicale()\Valore=ValoreEventoDiBase
  3556.    If NotaSuonata\Eseguito=True
  3557.     Nota.b=NotaSuonata\Evento
  3558.     VelocitaNota.b=NotaSuonata\Valore
  3559.     CanaleNota.b=NotaSuonata\Canale
  3560.     SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleNota,#EseguiGliEventiDallEditoreSequenza}
  3561.    EndIf
  3562.    NotaSuonata\Evento=EventoMusicale()\Evento,EventoMusicale()\Inizio,EventoMusicale()\Canale,EventoMusicale()\Sequenza
  3563.    NotaSuonata\Durata=EventoMusicale()\Durata,EventoMusicale()\Valore
  3564.    SuonaLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiDallEditoreSequenza}
  3565.    NotaSuonata\Eseguito=True
  3566.    DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  3567.  Else
  3568.    EZRequest "AmySequencer message","You have used all the available events","OK"
  3569.   EndIf
  3570.  Else
  3571.   EZRequest "AmySequencer message","You must select a channel first","OK"
  3572.  EndIf
  3573. End Statement
  3574.  
  3575. ;------------------------------------------------
  3576. ;questa procedura permette di gestire gli eventi
  3577. ;this procedure permits to manage events
  3578. ;----------------------------------------
  3579. Statement EditoreSequenza{}
  3580. SHARED AltezzaFonte
  3581. SHARED AltezzaInternaFinestraEditoreSequenza
  3582. SHARED AltezzaSchermo
  3583. SHARED AreaInvisibileDelleNote
  3584. SHARED AreaInvisibileDelTempo
  3585. SHARED AreaVisibileDeiValori
  3586. SHARED Battiti
  3587. SHARED CanaleSelezionato
  3588. SHARED ColoriOriginali
  3589. SHARED DurataSequenza
  3590. SHARED Eventi
  3591. SHARED EventiSelezionati
  3592. SHARED EventoMusicale()
  3593. SHARED LarghezzaInternaFinestraEditoreSequenza
  3594. SHARED LarghezzaEventoDiBase
  3595. SHARED LarghezzaSchermo
  3596. SHARED MIDIAttivato
  3597. SHARED Misure
  3598. SHARED MostraNuovoValore
  3599. SHARED NotaSuonata
  3600. SHARED NoteSuonate
  3601. SHARED OttavaSelezionata
  3602. SHARED PeriFreq()
  3603. SHARED PrimaVoltaNellEditoreSequenza
  3604. SHARED ScalaNote
  3605. SHARED Sequenza()
  3606. SHARED SequenzaSelezionata
  3607. SHARED TastoBackspace$
  3608. SHARED TastoCursoreDestra$
  3609. SHARED TastoCursoreGiu$
  3610. SHARED TastoCursoreSinistra$
  3611. SHARED TastoCursoreSu$
  3612. SHARED TastoEsc$
  3613. SHARED TicPerCinquantesimoDiSecondo
  3614. SHARED TipoDiEvento$
  3615. SHARED TipoDiNota()
  3616. SHARED XInizioAreaVisibile
  3617. SHARED XLunSlider
  3618. SHARED XTopo
  3619. SHARED YInizioAreaVisibile
  3620. SHARED YLunSlider
  3621. SHARED YTopo
  3622.  
  3623. ;-----------------------------------------------------------------------
  3624. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  3625. ;sets text menu colour to the brightest available
  3626. ;-------------------------------------------------
  3627.  MenuColour 3
  3628.  
  3629.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  3630.  TipoFinestra.l=#GadgetNascondiFinestra+#GadgetChiudiFinestra+#FinestraConMemoriaSfondo+#FinestraAttivata
  3631.  Eventi=Sequenza(SequenzaSelezionata-1)\Eventi
  3632.  EventiSelezionati=Sequenza(SequenzaSelezionata-1)\EventiSelezionati
  3633.  TitoloFinestra$="Sequence "+Str$(SequenzaSelezionata)+"-"
  3634.  If Eventi>0
  3635.   TitoloFinestra$+Str$(EventiSelezionati)+"selected event"
  3636.   If EventiSelezionati<>1 Then TitoloFinestra$+"s"
  3637.   TitoloFinestra$+" of "+Str$(Eventi)+" event"
  3638.   If Eventi<>1 Then TitoloFinestra$+"s"
  3639.  Else
  3640.   TitoloFinestra$+"no events into this sequence"
  3641.  EndIf
  3642.  Window #FinestraEditoreSequenza,XPosF,YPosF,XLunF,YLunF,TipoFinestra,TitoloFinestra$,-1,-1
  3643.  LarghezzaInternaFinestraEditoreSequenza=InnerWidth
  3644.  AltezzaInternaFinestraEditoreSequenza=InnerHeight
  3645.  CloseWindow #FinestraEditoreSequenza
  3646.  
  3647.  AreaInvisibileDelleNote.b=128-(AltezzaInternaFinestraEditoreSequenza-8-8)/8
  3648.  
  3649.  AreaVisibileDeiValori.w=(128-AreaInvisibileDelleNote)*8-1-7
  3650.  
  3651.  XLunSlider=16
  3652.  YLunSlider=AltezzaInternaFinestraEditoreSequenza-8-8
  3653.  ImpostaSlider{1,0,0,"VERTICAL",0,#ListaGadgetEditoreSequenza}
  3654.  
  3655.  XLunSlider=LarghezzaInternaFinestraEditoreSequenza-16
  3656.  YLunSlider=8
  3657.  ImpostaSlider{2,16,AltezzaInternaFinestraEditoreSequenza-8-8,"HORIZONTAL",0,#ListaGadgetEditoreSequenza}
  3658.  
  3659.  Window #FinestraEditoreSequenza,XPosF,YPosF,XLunF,YLunF,TipoFinestra,TitoloFinestra$,-1,-1,#ListaGadgetEditoreSequenza
  3660.  
  3661. ;----------------------------------------------
  3662. ;imposta la fonte di caratteri per la finestra
  3663. ;sets the font for the window
  3664. ;-----------------------------
  3665.  WindowFont #FonteDiCaratteriTopaz8
  3666.  
  3667.  WJam #DueColoriConSfondoPieno
  3668.  
  3669.  SetZone 0,0,0,LarghezzaInternaFinestraEditoreSequenza-1,AltezzaInternaFinestraEditoreSequenza-1-8-8
  3670.  Format "00"
  3671.  For Canale.b=1 To 16
  3672.   X0Canale.w=(Canale-1)*16:Y0Canale.w=AltezzaInternaFinestraEditoreSequenza-8
  3673.   WLocate X0Canale,Y0Canale
  3674.   If Canale=CanaleSelezionato
  3675.    WColour Canale-1,16-Canale
  3676.   Else
  3677.    If ColoriOriginali=True
  3678.     WColour Canale MOD 2+1,Canale MOD 2
  3679.    Else
  3680.     WColour 10+(Canale MOD 2)*2,9+(Canale MOD 2)*2
  3681.    EndIf
  3682.   EndIf
  3683.   Print Canale
  3684.   SetZone Canale,X0Canale,Y0Canale,X0Canale+15,Y0Canale+7
  3685.  Next Canale
  3686.  Format ""
  3687.  WLocate X0Canale+16,Y0Canale
  3688.  If ColoriOriginali=True Then WColour 2,1 Else WColour 14,13
  3689.  Print "All":SetZone 17,X0Canale+16,Y0Canale,X0Canale+16+23,Y0Canale+7
  3690.  WLocate X0Canale+16+8*3,Y0Canale
  3691.  If ColoriOriginali=True Then WColour 1,0 Else WColour 15,14
  3692.  Print "None":SetZone 18,X0Canale+16+8*3,Y0Canale,X0Canale+16+8*3+8*4-1,Y0Canale+7
  3693.  WLocate X0Canale+16+8*3+8*4,Y0Canale
  3694.  If ColoriOriginali=True Then WColour 2,1 Else WColour 14,13
  3695.  Print "Toggle":SetZone 19,X0Canale+16+8*3+8*4,Y0Canale,X0Canale+16+8*3+8*4+8*6-1,Y0Canale+7
  3696.  MostraLaScalaDelleNote{}
  3697.  SetZone 20,0,AltezzaInternaFinestraEditoreSequenza-8-8,15,AltezzaInternaFinestraEditoreSequenza-8-8+7
  3698.  InizioSequenza.l=Sequenza(SequenzaSelezionata-1)\Inizio
  3699.  Repeat
  3700.   If SecondoClicDelTopo.b=False
  3701.    TitoloFinestra$="Sequence "+Str$(SequenzaSelezionata)+"-"
  3702.    If Eventi>0
  3703.     TitoloFinestra$+Str$(EventiSelezionati)+" selected event"
  3704.     If EventiSelezionati<>1 Then TitoloFinestra$+"s"
  3705.     TitoloFinestra$+" of "+Str$(Eventi)+" event"
  3706.     If Eventi<>1 Then TitoloFinestra$+"s"
  3707.    Else
  3708.     TitoloFinestra$+"no events into this sequence"
  3709.    EndIf
  3710.    WTitle TitoloFinestra$
  3711.  
  3712.    If PrimaVoltaNellEditoreSequenza=True
  3713. ;------------------------------------------------------------------
  3714. ;questa variabile indica l'inizio delle note nell'editore sequenza
  3715. ;this variable states the note beginning in the sequence editor
  3716. ;---------------------------------------------------------------
  3717.     YInizioAreaVisibile=127-(127-AreaInvisibileDelleNote)-#_MiddleC
  3718.    EndIf
  3719.  
  3720.    ImpostaMenuFinestraEditoreSequenza{}
  3721.    MostraLeNoteDiSfondoConILoroNomi{}
  3722.    MostraLeBattute{}
  3723.    MostraGliEventiMusicali{}
  3724.    MostraSliderEditoreSequenza{}
  3725.    SecondoClicDelTopo=True
  3726.   EndIf
  3727.   If NotaSuonata\Eseguito=True
  3728.    Nota.b=NotaSuonata\Evento:InizioNota.l=NotaSuonata\Inizio
  3729.    FineNota.l=InizioNota+NotaSuonata\Durata-1
  3730.    VelocitaNota.b=NotaSuonata\Valore
  3731.    CanaleNota.b=NotaSuonata\Canale
  3732.    If Tempo>FineNota
  3733.     SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleNota,#EseguiGliEventiDallEditoreSequenza}
  3734.     NotaSuonata\Eseguito=False
  3735.    EndIf
  3736.   Else
  3737.    ResetTimer
  3738.   EndIf
  3739.   If NoteSuonate>0
  3740.    If NoteSuonate=1 Then Messaggio$="There is a note" Else Messaggio$="There are "+Str$(NoteSuonate)
  3741.    Messaggio$+" still playing:|clicking on OK you will stop "
  3742.    If NoteSuonate=1 Then Messaggio$+"this." Else Messaggio$+"these."
  3743.    EZRequest "AmySequencer message",Messaggio$,"OK"
  3744.    InterrompiTutteLeNote{#EseguiGliEventiDallEditoreSequenza}
  3745.    NoteSuonate=0
  3746.   EndIf
  3747.   If PrimaVoltaNellEditoreSequenza=True
  3748.    MostraITastiDaUsare{}
  3749.    MostraLaMappaturaDelleNoteSullaTastiera{}
  3750.    PrimaVoltaNellEditoreSequenza=False
  3751.   EndIf
  3752.   EventoFinestraEditoreSequenza.l=Event
  3753.   TempoTrascorso.l=Timer
  3754.   Select EventoFinestraEditoreSequenza
  3755.   Case #HaiPremutoUnTastoDelTopo
  3756.    TastoCliccatoDelTopo=MButtons:TastoPremutoDelTopo=Joyb(0)
  3757.    XTopo=WMouseX:YTopo=WMouseY:ZonaTopo.b=Zone(XTopo,YTopo)
  3758.    Select TastoCliccatoDelTopo
  3759.    Case 1
  3760.     Select ZonaTopo
  3761.     Case 0
  3762.      Selezione{#SelezionaUnEvento}
  3763.     Case 1
  3764.      Format "00"
  3765.      If CanaleSelezionato>0
  3766.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3767.       If ColoriOriginali=True
  3768.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3769.       Else
  3770.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3771.       EndIf
  3772.       Print Str$(CanaleSelezionato)
  3773.      EndIf
  3774.      CanaleSelezionato=1:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3775.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3776.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3777.      Format ""
  3778.     Case 2
  3779.      Format "00"
  3780.      If CanaleSelezionato>0
  3781.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3782.       If ColoriOriginali=True
  3783.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3784.       Else
  3785.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3786.       EndIf
  3787.       Print Str$(CanaleSelezionato)
  3788.      EndIf
  3789.      CanaleSelezionato=2:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3790.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3791.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3792.      Format ""
  3793.     Case 3
  3794.      Format "00"
  3795.      If CanaleSelezionato>0
  3796.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3797.       If ColoriOriginali=True
  3798.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3799.       Else
  3800.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3801.       EndIf
  3802.       Print Str$(CanaleSelezionato)
  3803.      EndIf
  3804.      CanaleSelezionato=3:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3805.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3806.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3807.      Format ""
  3808.     Case 4
  3809.      Format "00"
  3810.      If CanaleSelezionato>0
  3811.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3812.       If ColoriOriginali=True
  3813.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3814.       Else
  3815.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3816.       EndIf
  3817.       Print Str$(CanaleSelezionato)
  3818.      EndIf
  3819.      CanaleSelezionato=4:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3820.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3821.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3822.      Format ""
  3823.     Case 5
  3824.      Format "00"
  3825.      If CanaleSelezionato>0
  3826.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3827.       If ColoriOriginali=True
  3828.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3829.       Else
  3830.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3831.       EndIf
  3832.       Print Str$(CanaleSelezionato)
  3833.      EndIf
  3834.      CanaleSelezionato=5:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3835.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3836.      WColour CanaleSeleZionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3837.      Format ""
  3838.     Case 6
  3839.      Format "00"
  3840.      If CanaleSelezionato>0
  3841.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3842.       If ColoriOriginali=True
  3843.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3844.       Else
  3845.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3846.       EndIf
  3847.       Print Str$(CanaleSelezionato)
  3848.      EndIf
  3849.      CanaleSelezionato=6:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3850.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3851.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3852.      Format ""
  3853.     Case 7
  3854.      Format "00"
  3855.      If CanaleSelezionato>0
  3856.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3857.       If ColoriOriginali=True
  3858.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3859.       Else
  3860.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3861.       EndIf
  3862.       Print Str$(CanaleSelezionato)
  3863.      EndIf
  3864.      CanaleSelezionato=7:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3865.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3866.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3867.      Format ""
  3868.     Case 8
  3869.      Format "00"
  3870.      If CanaleSelezionato>0
  3871.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3872.       If ColoriOriginali=True
  3873.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3874.       Else
  3875.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3876.       EndIf
  3877.       Print Str$(CanaleSelezionato)
  3878.      EndIf
  3879.      CanaleSelezionato=8:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3880.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3881.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3882.      Format ""
  3883.     Case 9
  3884.      Format "00"
  3885.      If CanaleSelezionato>0
  3886.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3887.       If ColoriOriginali=True
  3888.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3889.       Else
  3890.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3891.       EndIf
  3892.       Print Str$(CanaleSelezionato)
  3893.      EndIf
  3894.      CanaleSelezionato=9:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3895.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3896.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3897.      Format ""
  3898.     Case 10
  3899.      Format "00"
  3900.      If CanaleSelezionato>0
  3901.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3902.       If ColoriOriginali=True
  3903.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3904.       Else
  3905.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3906.       EndIf
  3907.       Print Str$(CanaleSelezionato)
  3908.      EndIf
  3909.      CanaleSelezionato=10:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3910.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3911.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3912.      Format ""
  3913.     Case 11
  3914.      Format "00"
  3915.      If CanaleSelezionato>0
  3916.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3917.       If ColoriOriginali=True
  3918.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3919.       Else
  3920.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3921.       EndIf
  3922.       Print Str$(CanaleSelezionato)
  3923.      EndIf
  3924.      CanaleSelezionato=11:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3925.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3926.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3927.      Format ""
  3928.     Case 12
  3929.      Format "00"
  3930.      If CanaleSelezionato>0
  3931.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3932.       If ColoriOriginali=True
  3933.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3934.       Else
  3935.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3936.       EndIf
  3937.       Print Str$(CanaleSelezionato)
  3938.      EndIf
  3939.      CanaleSelezionato=12:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3940.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3941.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3942.      Format ""
  3943.     Case 13
  3944.      Format "00"
  3945.      If CanaleSelezionato>0
  3946.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3947.       If ColoriOriginali=True
  3948.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3949.       Else
  3950.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3951.       EndIf
  3952.       Print Str$(CanaleSelezionato)
  3953.      EndIf
  3954.      CanaleSelezionato=13:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3955.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3956.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3957.      Format ""
  3958.     Case 14
  3959.      Format "00"
  3960.      If CanaleSelezionato>0
  3961.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3962.       If ColoriOriginali=True
  3963.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3964.       Else
  3965.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3966.       EndIf
  3967.       Print Str$(CanaleSelezionato)
  3968.      EndIf
  3969.      CanaleSelezionato=14:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3970.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3971.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3972.      Format ""
  3973.     Case 15
  3974.      Format "00"
  3975.      If CanaleSelezionato>0
  3976.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3977.       If ColoriOriginali=True
  3978.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3979.       Else
  3980.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3981.       EndIf
  3982.       Print Str$(CanaleSelezionato)
  3983.      EndIf
  3984.      CanaleSelezionato=15:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  3985.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3986.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  3987.      Format ""
  3988.     Case 16
  3989.      Format "00"
  3990.      If CanaleSelezionato>0
  3991.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  3992.       If ColoriOriginali=True
  3993.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  3994.       Else
  3995.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  3996.       EndIf
  3997.       Print Str$(CanaleSelezionato)
  3998.      EndIf
  3999.      CanaleSelezionato=16:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  4000.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4001.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  4002.      Format ""
  4003.     Case 17
  4004.      Selezione{#SelezionaTuttiGliEventi}
  4005.      NoteSelezionate=Note
  4006.     Case 18
  4007.      Selezione{#DeselezionaTuttiGliEventi}
  4008.      NoteSelezionate=0
  4009.     Case 19
  4010.      Selezione{#InvertiLaSelezioneDiTuttiGliEventi}
  4011.     Case 20
  4012.      ScalaNote+ScalaNote
  4013.      If ScalaNote=64 Then ScalaNote=1
  4014.      AreaInvisibileDelTempo=(DurataSequenza-LarghezzaInternaFinestraEditoreSequenza-16)/ScalaNote
  4015.      MostraLaScalaDelleNote{}
  4016.      MostraSliderEditoreSequenza{}
  4017.     End Select
  4018.     SecondoClicDelTopo=False
  4019.    Case 5
  4020.     If TempoTrascorso>49 AND ZonaTopo=0
  4021.      Selezione{#SelezionaGliEventiUguali}
  4022.      SecondoClicDelTopo=False
  4023.     Else
  4024.      SecondoClicDelTopo=True
  4025.     EndIf
  4026.    End Select
  4027. ;   Case #HaiPremutoUnGadget
  4028. ;    Select GadgetHit
  4029. ;    Case 1
  4030. ;     AltezzaSlider.w=AltezzaInternaFinestraEditoreSequenza-8-8
  4031. ;     YInizioAreaVisibile=ValoreSlider{1,AreaInvisibileDelleNote,AltezzaSlider,"VERTICAL",#ListaGadgetEditoreSequenza}
  4032. ;    Case 2
  4033. ;     LunghezzaSlider.w=LarghezzaInternaFinestraEditoreSequenza-16
  4034. ;     XInizioAreaVisibile=ValoreSlider{2,AreaInvisibileDelTempo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetEditoreSequenza}
  4035. ;    End Select
  4036.   Case #HaiRilasciatoUnGadget
  4037.    Select GadgetHit
  4038.    Case 1
  4039.     AltezzaSlider.w=AltezzaInternaFinestraEditoreSequenza-8-8
  4040.     YInizioAreaVisibile=ValoreSlider{1,AreaInvisibileDelleNote,AltezzaSlider,"VERTICAL",#ListaGadgetEditoreSequenza}
  4041.    Case 2
  4042.     LunghezzaSlider.w=LarghezzaInternaFinestraEditoreSequenza-16
  4043.     XInizioAreaVisibile=ValoreSlider{2,AreaInvisibileDelTempo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetEditoreSequenza}
  4044.    End Select
  4045.    SecondoClicDelTopo=False
  4046.   Case #HaiAttivatoIlMenu
  4047.    If MenuHit=0 AND ItemHit=0 Then EseguiGliEventi{#EseguiGliEventiDallEditoreSequenza}
  4048.    If MenuHit=1 AND ItemHit=0 Then TipoDiEvento$="Note"
  4049.    If MenuHit=1 AND ItemHit=1 Then TipoDiEvento$="Program"
  4050.    If MenuHit=1 AND ItemHit=2 Then TipoDiEvento$="Control"
  4051.    If MenuHit=1 AND ItemHit=3 Then TipoDiEvento$="Tempo"
  4052.    If MenuHit=2 AND ItemHit=0 Then CambiaLEventoDiBase{}
  4053.    If MenuHit=2 AND ItemHit=1 Then MostraNuovoValore=NOT MostraNuovoValore
  4054.    If MenuHit=3 AND ItemHit=0 Then MostraITastiDaUsare{}
  4055.    If MenuHit=3 AND ItemHit=1 Then MostraLaMappaturaDelleNoteSullaTastiera{}
  4056.    SecondoClicDelTopo=False
  4057.   Case #HaiChiusoLaFinestra
  4058.    EsciDallEditoreSequenza.b=True
  4059.   Case #HaiPremutoUnTasto
  4060.    TastoPremuto$=LCase$(Inkey$):TastoRiga.w=RawKey
  4061.    If TastoPremuto$=TastoEsc$ Then EsciDallEditoreSequenza=True
  4062.    Select TastoRiga
  4063.    Case 2
  4064.     Nota$="C#2"
  4065.    Case 3
  4066.     Nota$="D#2"
  4067.    Case 5
  4068.     Nota$="F#2"
  4069.    Case 6
  4070.     Nota$="G#2"
  4071.    Case 7
  4072.     Nota$="A#2"
  4073.    Case 16
  4074.     Nota$="C2"
  4075.    Case 17
  4076.     Nota$="D2"
  4077.    Case 18
  4078.     Nota$="E2"
  4079.    Case 19
  4080.     Nota$="F2"
  4081.    Case 20
  4082.     Nota$="G2"
  4083.    Case 21
  4084.     Nota$="A2"
  4085.    Case 22
  4086.     Nota$="B2"
  4087.    Case 33
  4088.     Nota$="C#1"
  4089.    Case 34
  4090.     Nota$="D#1"
  4091.    Case 35
  4092.     Nota$="F#1"
  4093.    Case 36
  4094.     Nota$="G#1"
  4095.    Case 37
  4096.     Nota$="A#1"
  4097.    Case 49
  4098.     Nota$="C1"
  4099.    Case 50
  4100.     Nota$="D1"
  4101.    Case 51
  4102.     Nota$="E1"
  4103.    Case 52
  4104.     Nota$="F1"
  4105.    Case 53
  4106.     Nota$="G1"
  4107.    Case 54
  4108.     Nota$="A1"
  4109.    Case 55
  4110.     Nota$="B1"
  4111.    Case 80
  4112.     OttavaSelezionata=0
  4113.    Case 81
  4114.     OttavaSelezionata=1
  4115.    Case 82
  4116.     OttavaSelezionata=2
  4117.    Case 83
  4118.     OttavaSelezionata=3
  4119.    Case 84
  4120.     OttavaSelezionata=4
  4121.    Case 85
  4122.     OttavaSelezionata=5
  4123.    Case 86
  4124.     OttavaSelezionata=6
  4125.    Case 87
  4126.     OttavaSelezionata=7
  4127.    Case 88
  4128.     OttavaSelezionata=8
  4129.    Case 89
  4130.     OttavaSelezionata=9
  4131.    Default
  4132.     TastoRiga=0
  4133.    End Select
  4134.    If TastoRiga>0
  4135.     If TastoRiga<80
  4136.      AggiungiUnaNotaDallaTastiera{Nota$}
  4137.     Else
  4138.      YInizioAreaVisibile=Max(127-(127-AreaInvisibileDelleNote)-OttavaSelezionata*12,0)
  4139.     EndIf
  4140.    EndIf
  4141.    If EventiSelezionati>0
  4142.     TastiShiftPremuti.b=(Qualifier-$8000) AND %11
  4143.     If TastiShiftPremuti>0
  4144.      Select TastoPremuto$
  4145.      Case TastoBackspace$
  4146.       Selezione{#EliminaGliEventiSelezionati}
  4147.      Case TastoCursoreSu$
  4148.       If TipoDiEvento$="Note" Then Selezione{#AlzaDiUnOttavaLeNoteSelezionate}
  4149.       If TipoDiEvento$="Program" Then Selezione{#AggiungiDieciAgliEventiSelezionati}
  4150.       If TipoDiEvento$="Control" Then Selezione{#AggiungiDieciAgliEventiSelezionati}
  4151.       If TipoDiEvento$="Tempo" Then Selezione{#AggiungiUnaMisuraAlTempoSelezionato}
  4152.      Case TastoCursoreGiu$
  4153.       If TipoDiEvento$="Note" Then Selezione{#AbbassaDiUnOttavaLeNoteSelezionate}
  4154.       If TipoDiEvento$="Program" Then Selezione{#SottraiDieciAgliEventiSelezionati}
  4155.       If TipoDiEvento$="Control" Then Selezione{#SottraiDieciAgliEventiSelezionati}
  4156.       If TipoDiEvento$="Tempo" Then Selezione{#TogliUnaMisuraAlTempoSelezionato}
  4157.      Case TastoCursoreDestra$
  4158.       If TipoDiEvento$="Note" Then Selezione{#AllungaLaDurataDelleNoteSelezionate}
  4159.      Case TastoCursoreSinistra$
  4160.       If TipoDiEvento$="Note" Then Selezione{#RiduciLaDurataDelleNoteSelezionate}
  4161.      End Select
  4162.     Else
  4163.      Select TastoPremuto$
  4164.      Case TastoBackspace$
  4165.       If LastItem(EventoMusicale())=True
  4166.        If EventoMusicale()\Selezionato=True Then EventiSelezionati-1
  4167.        DurataSequenza-EventoMusicale()\Durata
  4168.        XInizioAreaVisibile-EventoMusicale()\Durata
  4169.        XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  4170.        KillItem EventoMusicale():Eventi-1
  4171.       EndIf
  4172.      Case TastoCursoreSu$
  4173.       If TipoDiEvento$="Tempo"
  4174.        Selezione{#AggiungiUnBattitoAlTempoSelezionato}
  4175.       Else
  4176.        Selezione{#AlzaDiUnoGliEventiSelezionati}
  4177.       EndIf
  4178.      Case TastoCursoreGiu$
  4179.       If TipoDiEvento$="Tempo"
  4180.        Selezione{#TogliUnBattitoAlTempoSelezionato}
  4181.       Else
  4182.        Selezione{#AbbassaDiUnoGliEventiSelezionati}
  4183.       EndIf
  4184.      Case TastoCursoreDestra$
  4185.       Selezione{#SpostaAvantiNelTempoGliEventiSelezionati}
  4186.      Case TastoCursoreSinistra$
  4187.       Selezione{#SpostaIndietroNelTempoGliEventiSelezionati}
  4188.      End Select
  4189.     EndIf
  4190.    Else
  4191.     Select TastoPremuto$
  4192.     Case TastoBackspace$
  4193.      If LastItem(EventoMusicale())=True
  4194.       If EventoMusicale()\Selezionato=True Then EventiSelezionati-1
  4195.       DurataSequenza-EventoMusicale()\Durata
  4196.       XInizioAreaVisibile-EventoMusicale()\Durata
  4197.       XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  4198.       KillItem EventoMusicale():Eventi-1
  4199.      EndIf
  4200.     Case TastoCursoreSu$
  4201.      If YInizioAreaVisibile>0 Then YInizioAreaVisibile-1
  4202.     Case TastoCursoreGiu$
  4203.      If YInizioAreaVisibile<AreaInvisibileDelleNote Then YInizioAreaVisibile+1
  4204.     Case TastoCursoreDestra$
  4205.      XInizioAreaVisibile+LarghezzaEventoDiBase
  4206.      XInizioAreaVisibile=Min(XInizioAreaVisibile,AreaInvisibileDelTempo)
  4207.     Case TastoCursoreSinistra$
  4208.      XInizioAreaVisibile-LarghezzaEventoDiBase
  4209.      XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  4210.     End Select
  4211.    EndIf
  4212.    If TastoPremuto$=" " Then DurataSequenza+192*(4.0/Misure)
  4213.    SecondoClicDelTopo=False
  4214.   End Select
  4215.   Tempo=Timer*TicPerCinquantesimoDiSecondo
  4216.  Until EsciDallEditoreSequenza=True
  4217.  Sequenza(SequenzaSelezionata-1)\Eventi=Eventi
  4218.  Sequenza(SequenzaSelezionata-1)\EventiSelezionati=EventiSelezionati
  4219.  Sequenza(SequenzaSelezionata-1)\Inizio=InizioSequenza
  4220.  Sequenza(SequenzaSelezionata-1)\Durata=DurataSequenza
  4221.  CloseWindow #FinestraEditoreSequenza
  4222.  Use Window #FinestraPrincipale
  4223.  WJam #UnColoreConSfondoTrasparente
  4224. End Statement
  4225.  
  4226. ;---------------------------------------------
  4227. ;questa procedura mostra la sequenza indicata
  4228. ;this procedure shows the stated sequence
  4229. ;-----------------------------------------
  4230. Statement MostraSequenza{NomeSequenza$,InizioSequenza.l,YSequenza.b,DurataSequenza.l,EventiSequenza.l,ModoDisegno.b}
  4231. SHARED AltezzaInternaFinestraPrincipale
  4232. SHARED LarghezzaInternaFinestraPrincipale
  4233. SHARED SequenzeVisibili
  4234. SHARED XSequenzeVisibili
  4235. SHARED YSequenzeVisibili
  4236.  Y0.w=8+YSequenza*8:Y1.w=Y0+7
  4237.  If Y0>=8 AND Y1<8+SequenzeVisibili*8
  4238.   FineSequenza.l=InizioSequenza+DurataSequenza-1
  4239.   I.w=16+InizioSequenza-XSequenzeVisibili
  4240.   F.w=16+FineSequenza-XSequenzeVisibili
  4241.   If I>=16 AND I<LarghezzaInternaFinestraPrincipale
  4242.    InizioSequenzaVisibile.b=True
  4243.   Else
  4244.    InizioSequenzaVisibile=False
  4245.   EndIf
  4246.   If F>=16 AND F<LarghezzaInternaFinestraPrincipale
  4247.    FineSequenzaVisibile.b=True
  4248.   Else
  4249.    FineSequenzaVisibile=False
  4250.   EndIf
  4251.   If I<16 AND F>LarghezzaInternaFinestraPrincipale
  4252.    SequenzaVisibile.b=True
  4253.   Else
  4254.    If InizioSequenzaVisibile=True OR FineSequenzaVisibile=True
  4255.     SequenzaVisibile=True
  4256.    Else
  4257.     SequenzaVisibile=False
  4258.    EndIf
  4259.   EndIf
  4260.   If SequenzaVisibile=True
  4261.    X0Sequenza.w=Min(Max(I,16),LarghezzaInternaFinestraPrincipale-1)
  4262.    Y0Sequenza.w=Min(Max(Y0,8),AltezzaInternaFinestraPrincipale-1-8-8-4-7)
  4263.    X1Sequenza.w=Min(Max(F,16),LarghezzaInternaFinestraPrincipale-1)
  4264.    Y1Sequenza.w=Min(Max(Y1,8+7),AltezzaInternaFinestraPrincipale-1-8-8-4)
  4265.    ColoreSequenza.b=(YSequenza+YSequenzeVisibili) MOD 16
  4266.    WBox X0Sequenza,Y0Sequenza,X1Sequenza,Y1Sequenza,ColoreSequenza
  4267.    If ModoDisegno=#SequenzaSelezionata
  4268.     Wline X0Sequenza,Y0,X1Sequenza,Y1,15-ColoreSequenza
  4269.     Wline X0Sequenza,Y1,X1Sequenza,Y0,15-ColoreSequenza
  4270.    EndIf
  4271.    If ModoDisegno=#SequenzaNonSelezionata
  4272.     Wline X0Sequenza+1,Y0Sequenza+1,X1Sequenza-1,Y0Sequenza+1,15-ColoreSequenza
  4273.     Wline X0Sequenza+1,Y1Sequenza-1,X1Sequenza-1,Y1Sequenza-1,15-ColoreSequenza
  4274.    EndIf
  4275.    If ModoDisegno=#SequenzaNonSelezionata
  4276.     If InizioSequenzaVisibile=True
  4277.      Wline I+1,Y0Sequenza+1,I+1,Y1Sequenza-1,15-ColoreSequenza
  4278.     EndIf
  4279.     If FineSequenzaVisibile=True
  4280.      Wline F-1,Y0Sequenza+1,F-1,Y1Sequenza-1,15-ColoreSequenza
  4281.     EndIf
  4282.    EndIf
  4283.    If NomeSequenza$="" Then NomeSequenza$="Sequence "+Str$(YSequenza+YSequenzeVisibili+1)
  4284.    If I>=16 OR I<LarghezzaInternaFinestraPrincipale OR F>=16 OR F<LarghezzaInternaFinestraPrincipale
  4285.     WColour 15-ColoreSequenza,ColoreSequenza
  4286.     I=Max(I,16):F=Min(F,LarghezzaInternaFinestraPrincipale-1)
  4287.     WLocate I,Y0Sequenza:Print Left$(Right$(NomeSequenza$,(F-16+1)/8),(F-I+1)/8)
  4288.    EndIf
  4289.   EndIf
  4290.  EndIf
  4291. End Statement
  4292.  
  4293. ;--------------------------------------------------------------
  4294. ;questa procedura mostra le sequenze nella finestra principale
  4295. ;this procedure show the sequences in the main window
  4296. ;-----------------------------------------------------
  4297. Statement MostraLeSequenze{}
  4298. SHARED AreaInvisibileDelMotivo
  4299. SHARED ColoriOriginali
  4300. SHARED FineMotivo
  4301. SHARED LarghezzaInternaFinestraPrincipale
  4302. SHARED Sequenza()
  4303. SHARED SequenzaSelezionata
  4304. SHARED Sequenze
  4305. SHARED SequenzeVisibili
  4306. SHARED XSequenzeVisibili
  4307. SHARED YSequenzeVisibili
  4308.  While Sequenze>0 AND YSequenza<SequenzeVisibili
  4309.   NomeSequenza$=Sequenza(YSequenza+YSequenzeVisibili)\Nome
  4310.   InizioSequenza.l=Sequenza(YSequenza+YSequenzeVisibili)\Inizio
  4311.   DurataSequenza.l=Sequenza(YSequenza+YSequenzeVisibili)\Durata
  4312.   If DurataSequenza>0
  4313.    EventiSequenza.l=Sequenza(YSequenza+YSequenzeVisibili)\Eventi
  4314.    If YSequenza+YSequenzeVisibili+1=SequenzaSelezionata Then Modo.b=#SequenzaSelezionata Else Modo=#SequenzaNonSelezionata
  4315.    MostraSequenza{NomeSequenza$,InizioSequenza,YSequenza,DurataSequenza,EventiSequenza,Modo}
  4316.   EndIf
  4317.   YSequenza+1
  4318.  Wend
  4319.  FineMotivo=0
  4320.  For TutteLeSequenze.w=0 To #MassimoSequenze-1
  4321.   DurataSequenza.l=Sequenza(TutteLeSequenze)\Durata
  4322.   If DurataSequenza>0
  4323.    FineSequenza.l=Sequenza(TutteLeSequenze)\Inizio+DurataSequenza-1
  4324.    FineMotivo=Max(FineMotivo,FineSequenza+1)
  4325.   EndIf
  4326.  Next TutteLeSequenze
  4327.  AreaInvisibileDelMotivo=Max(FineMotivo-(LarghezzaInternaFinestraPrincipale-16),0)
  4328.  MostraSlider{3,XSequenzeVisibili,AreaInvisibileDelMotivo,"HORIZONTAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  4329. End Statement
  4330.  
  4331. Statement MostraIBattitiPerMinuto{}
  4332. SHARED AltezzaFonte
  4333. SHARED AltezzaSchermo
  4334. SHARED BattuteAlMinuto
  4335. SHARED TicPerCinquantesimoDiSecondo
  4336.  WLocate 0,AltezzaSchermo-(AltezzaFonte+3)-8-8
  4337.  WColour 3:Print "BPM>",BattuteAlMinuto," Ticks/50th>",TicPerCinquantesimoDiSecondo
  4338. End Statement
  4339.  
  4340. ;-----------------------------------------------------------
  4341. ;questa pprocedura elimina tutti gli eventi du una sequenza
  4342. ;this procedure deletes all the events of a sequence
  4343. ;----------------------------------------------------
  4344. Statement EliminaTuttiGliEventiDellaSequenza{Sequenza.w}
  4345. SHARED EventoMusicale()
  4346. SHARED Sequenza()
  4347.  If Sequenza(Sequenza)\Eventi>0
  4348.   While NextItem(EventoMusicale())=True
  4349.    If EventoMusicale()\Sequenza=Sequenza Then KillItem EventoMusicale()
  4350.   Wend
  4351.  EndIf
  4352. End Statement
  4353.  
  4354. ;*********************************************
  4355. ;Fine delle procedure ed inizio del programma
  4356. ;procedures end and program start
  4357. ;*********************************
  4358.  
  4359. ;----------------------------------------------------
  4360. ;questo programma puo' essere lanciato dal Workbench
  4361. ;this program can be launched from Workbench
  4362. ;_-------------------------------------------
  4363. WBStartup
  4364.  
  4365. BlitMode CookieMode
  4366.  
  4367. CaricaLaFonteDiCaratteriTopaz8{}
  4368.  
  4369. ImpostaIlParlatoDellAmiga{}
  4370.  
  4371. CaricaLeImmaginiDelleNote{}
  4372.  
  4373. CreaLaBitmapPerLImmagineDiSfondo{}
  4374.  
  4375. ImpostaLoSchermo{}
  4376.  
  4377. CaricaLImmagineDiSfondoNellaBitmap{}
  4378.  
  4379. CaricaLaStoriaDeiProgettiAperti{}
  4380.  
  4381. ImpostaLaFinestraPrincipale{}
  4382.  
  4383. CalcolaLaFrequenzaEdIlPeriodoDelleNote{}
  4384.  
  4385. MostraIlTempo{(Misure-1)*16+Battiti-1,#EseguiGliEventiDallaFinestraPrincipale}
  4386.  
  4387. AttivaMIDI{}
  4388.  
  4389. Sequenze.w=0
  4390.  
  4391. SequenzaSelezionata.w=0
  4392.  
  4393. VoceSpenta=%1111
  4394.  
  4395. ;-----------------
  4396. ;clclo principale
  4397. ;main loop
  4398. ;----------
  4399. Repeat
  4400.  
  4401.  If SecondoClicDelTopo.b=False
  4402.   MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  4403.   MostraGliEventiMusicaliDisponibili{}
  4404.   MostraLeSequenze{}
  4405.   MostraIBattitiPerMinuto{}
  4406.   MostraIlTempo{(Misure-1)*16+Battiti-1,#EseguiGliEventiDallaFinestraPrincipale}
  4407.   Redraw #FinestraPrincipale
  4408.   SecondoClicDelTopo=True
  4409.  EndIf
  4410.  
  4411.  If NoteSuonate>0
  4412.   If NoteSuonate=1 Then Messaggio$="There is a note" Else Messaggio$="There are "+Str$(NoteSuonate)
  4413.   Messaggio$+"still playing:|clicking on OK you will stop "
  4414.   If NoteSuonate=1 Then Messaggio$+"this." Else Messaggio$+"these."
  4415.   EZRequest "AmySequencer message",Messaggio$,"OK"
  4416.   InterrompiTutteLeNote{#EseguiGliEventiDallaFinestraPrincipale}
  4417.   NoteSuonate=0
  4418.  EndIf
  4419.  
  4420. ;--------------------------------------------------------------
  4421. ;questa variabile cattura gli eventi della finestra principale
  4422. ;this variable catch main window events
  4423. ;---------------------------------------
  4424.  EventoFinestraPrincipale.l=WaitEvent
  4425.  
  4426.  Select EventoFinestraPrincipale
  4427.  
  4428. ;------------------------------------
  4429. ;se avete premuto un tasto del mouse
  4430. ;if you have prssed a mouse button
  4431. ;----------------------------------
  4432.  Case #HaiPremutoUnTastoDelTopo
  4433.   XTopo=WMouseX:YTopo=WMouseY:TastoCliccatoDelTopo.b=MButtons
  4434.   Select TastoCliccatoDelTopo
  4435.   Case #TastoSinistroDelTopoPremuto
  4436.    If YTopo>=8 AND YTopo<8+SequenzeVisibili*8
  4437.     SequenzaSelezionata=YSequenzeVisibili+(YTopo-8)/8+1
  4438.     If Sequenza(SequenzaSelezionata-1)\Durata=0 Then Sequenze+1
  4439.     Sequenza(SequenzaSelezionata-1)\Inizio=XSequenzeVisibili+XTopo-16
  4440.     Sequenza(SequenzaSelezionata-1)\Durata=Max(Sequenza(SequenzaSelezionata-1)\Durata,192*4.0*Battiti/Misure)
  4441.    EndIf
  4442.    If YTopo>AltezzaInternaFinestraPrincipale-1-8-8 AND YTopo<AltezzaInternaFinestraPrincipale-8
  4443.     If XTopo>LarghezzaInternaFinestraPrincipale-Len("Tempo=00/00")*8
  4444.      CambiaLaMisuraDelTempo{}
  4445.      MostraIlTempo{(Misure-1)*16+Battiti-1,#EseguiGliEventiDallaFinestraPrincipale}
  4446.     EndIf
  4447.    EndIf
  4448.    SecondoClicDelTopo=False
  4449.   Case #TastoSinistroDelTopoRilasciato
  4450.    SecondoClicDelTopo=True
  4451.   End Select
  4452. ;---------------------------
  4453. ;se avete premuto un gadget
  4454. ;if you have pressed a gadget
  4455. ;-----------------------------
  4456. ; Case #HaiPremutoUnGadget
  4457. ;  Select GadgetHit
  4458. ;  Case 1
  4459. ;   LunghezzaSlider.w=LarghezzaInternaFinestraPrincipale
  4460. ;   BattuteAlMinuto=10+ValoreSlider{1,300-9,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  4461. ;   TicPerCinquantesimoDiSecondo=BattuteAlMinuto*192*4/3000
  4462. ;  Case 2
  4463. ;   AltezzaSlider.w=AltezzaSchermo-(AltezzaFonte+3)-8-8-8
  4464. ;   YSequenzeVisibili=ValoreSlider{2,#MassimoSequenze-SequenzeVisibili,LunghezzaSlider,"VERTICAL",#ListaGadgetPrincipale}
  4465. ;  Case 3
  4466. ;   LunghezzaSlider=LarghezzaInternaFinestraPrincipale-16
  4467. ;   XSequenzeVisibili=ValoreSlider{3,AreaInvisibileDelMotivo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  4468. ;  End Select
  4469. ;  SecondoClicDelTopo=False
  4470.  
  4471. ;------------------------------
  4472. ;se avete rilasciato un gadget
  4473. ;if you have released a gadget
  4474. ;------------------------------
  4475.  Case #HaiRilasciatoUnGadget
  4476.   Select GadgetHit
  4477.   Case 1
  4478.    LunghezzaSlider.w=LarghezzaInternaFinestraPrincipale
  4479.    BattuteAlMinuto=10+ValoreSlider{1,300-9,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  4480.    TicPerCinquantesimoDiSecondo=BattuteAlMinuto*192*4/3000
  4481.   Case 2
  4482.    AltezzaSlider.w=AltezzaSchermo-(AltezzaFonte+3)-8-8-8
  4483.    YSequenzeVisibili=ValoreSlider{2,#MassimoSequenze-SequenzeVisibili,AltezzaSlider,"VERTICAL",#ListaGadgetPrincipale}
  4484.   Case 3
  4485.    LunghezzaSlider=LarghezzaInternaFinestraPrincipale-16
  4486.    XSequenzeVisibili=ValoreSlider{3,AreaInvisibileDelMotivo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  4487.   End Select
  4488.   SecondoClicDelTopo=False
  4489.  
  4490. ;--------------------------------------
  4491. ;se avete attivato il menu' principale
  4492. ;if you have activated main menu
  4493. ;--------------------------------
  4494.  Case #HaiAttivatoIlMenu
  4495.   Select MenuHit
  4496.   Case 0
  4497.    If ItemHit=1
  4498.     CaricaUnProgetto{}
  4499.     ImpostaLaFinestraPrincipale{}
  4500.    EndIf
  4501.   Case 1
  4502.    If ItemHit=0
  4503.     EseguiGliEventi{#EseguiGliEventiDallaFinestraPrincipale}
  4504.     MostraIlTempo{(Misure-1)*16+Battiti-1,#EseguiGliEventiDallaFinestraPrincipale}
  4505.    EndIf
  4506.   Case 2
  4507.    Select ItemHit
  4508.    Case 0
  4509.     EditoreSuoni{}
  4510.    Case 1
  4511.     If SequenzaSelezionata>0
  4512.      EditoreSequenza{}
  4513.     Else
  4514.      EZRequest "AmySequencer message","You must select a sequence first","OK"
  4515.     EndIf
  4516.    End Select
  4517.   Case 3
  4518.    Select ItemHit
  4519.    Case 0
  4520.     AttivaMIDI{}
  4521.    Case 1
  4522.     ColoriOriginali=NOT ColoriOriginali
  4523.     CaricaLImmagineDiSfondoNellaBitmap{}
  4524.     CopiaLoSfondoSottoAlTempo{}
  4525.    Case 2
  4526.     If Exists("ProjectsHistory")
  4527.      CancellaLaStoriaDeiProgettiAperti{}
  4528.      ImpostaLaFinestraPrincipale{}
  4529.     EndIf
  4530.    End Select
  4531.   End Select
  4532.  
  4533. ;-------------------------------------------------------------------
  4534. ;se avete scelto la voce Quit dal menu' Project attiva la variabile
  4535. ; EsciDalProgramma
  4536. ;if you have selected voice Quit from Project menu activates EsciDalProgramma
  4537. ; flag
  4538. ;------
  4539.   If MenuHit=0 AND ItemHit=VoceMenuEsci Then EsciDalProgramma=True
  4540.  
  4541.   SecondoClicDelTopo=False
  4542.  
  4543. ;--------------------------
  4544. ;se avete premuto un tasto
  4545. ;if you have pressed a key
  4546. ;--------------------------
  4547.  Case #HaiPremutoUnTasto
  4548.  
  4549. ;--------------------------------------------
  4550. ;questa variabile memorizza il tasto premuto
  4551. ;this variable store key pressed
  4552. ;--------------------------------
  4553.   TastoPremuto$=Inkey$
  4554.  
  4555. ;-------------------------------------------------------------------
  4556. ;se avete premuto il tasto Esc attiva la variabile EsciDalProgramma
  4557. ;if you have typed Esc key activates EsciDalProgramma flag
  4558. ;----------------------------------------------------------
  4559.   If TastoPremuto$=TastoEsc$ Then EsciDalProgramma=True
  4560.   Select TastoPremuto$
  4561.   Case TastoBackspace$
  4562.    If SequenzaSelezionata>0
  4563.     EliminaTuttiGliEventiDellaSequenza{SequenzaSelezionata}
  4564.     Sequenza(SequenzaSelezionata-1)\Nome=""
  4565.     Sequenza(SequenzaSelezionata-1)\Inizio=0
  4566.     Sequenza(SequenzaSelezionata-1)\Durata=0
  4567.     Sequenza(SequenzaSelezionata-1)\Eventi=0
  4568.     Sequenza(SequenzaSelezionata-1)\EventiSelezionati=0
  4569.     Sequenze-1:SequenzaSelezionata=0
  4570.    EndIf
  4571.   Case TastoCursoreSu$
  4572.    If YSequenzeVisibili>0 Then YSequenzeVisibili-1
  4573.   Case TastoCursoreGiu$
  4574.    If YSequenzeVisibili<#MassimoSequenze-SequenzeVisibili Then YSequenzeVisibili+1
  4575.   Case TastoCursoreDestra$
  4576.    If XSequenzeVisibili<AreaInvisibileDelMotivo
  4577.     XSequenzeVisibili+LarghezzaEventoDiBase
  4578.     XSequenzeVisibili=Min(XSequenzeVisibili,AreaInvisibileDelMotivo)
  4579.    EndIf
  4580.   Case TastoCursoreSinistra$
  4581.    If XSequenzeVisibili>0
  4582.     XSequenzeVisibili-LarghezzaEventoDiBase
  4583.     XSequenzeVisibili=Max(XSequenzeVisibili,0)
  4584.    EndIf
  4585.   End Select
  4586.   SecondoClicDelTopo=False
  4587.  
  4588.  End Select
  4589.  
  4590. ;----------------------------------------------------------------
  4591. ;ripete il ciclo se la variabile EsciDalProgramma e' disattivata
  4592. ;repeats loop if EsciDalProgramma flag is deactivated
  4593. ;-----------------------------------------------------
  4594. Until EsciDalProgramma=True
  4595.  
  4596. ;----------------------
  4597. ;fine del programma
  4598. ;program end
  4599. ;------------
  4600. End
  4601.